GCC选项_-Wl,-soname
来源:互联网 发布:ps有没有mac版 编辑:程序博客网 时间:2024/05/16 01:20
###Date: 2017/12/11
-Wl,-soname -Wl 告诉编译器将后面的参数传递到链接器。而 -soname 指定了共享库的 soname(short for shared object name)。
这个soname的存在是为了兼容方便。
比如:
有一个程序ap1,以及一个库libtest.so.1
ap1启动的时候需要libtest.so.1
如果链接的时候直接把libtest.so.1传给了ap1,那么将来库升级为libtest.so.2的时候,ap1仍然只能使用libtest.so.1的代码,并不能得到升级的好处。而如果指定了soname为libtest.so,那么ap1启动的时候将查找的就是libtest.so而不是其在被链接时实际使用的库libtest.so.1这个文件名。
在开始时我们建立一个链接:ln -sf libtest.so.1 libtest.so
而在库升级后,我们重新:ln -sf libtest.so.2 libtest.so即可,这样ap1不需要任何变动就能享受升级后的库的特性了。而libtest.so.1,libtest.so.2可以同时存在于系统内,不必非得把libtest.so.2的名字改成libtest.so.1。
-Wl选项告诉编译器将后面的参数传递给链接器。
-soname则指定了动态库的soname(简单共享名,Short for shared object name)
soname的关键功能是它提供了兼容性的标准:
当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。
在Linux中,应用程序通过使用soname,来指定所希望库的版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容的,这使得程序员摆脱了共享库版本冲突问题的困扰。
可以通过readelf -d来查看每个动态库的SONAME。
总结: 程序库主要的升级会破坏向下兼容性;而次要的升级则不会破坏兼容性。
参考:
http://blog.csdn.net/gohome520/article/details/7259450
http://blog.csdn.net/autumnqin/article/details/5444114
阅读全文
0 0
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- GCC选项_-Wl,-soname
- 共享库(GCC选项_-Wl,-soname)
- gcc编译选项-Wl
- gcc中的-Wl,rpath=<your_lib_dir>选项
- gcc中的-Wl,rpath=<your_lib_dir>选项
- gcc中的-Wl,rpath=<your_lib_dir>选项
- gcc中的-Wl,rpath=<your_lib_dir>选项
- GCC选项-Xlinker和-Wl区别
- gcc中的-Wl,rpath=<your_lib_dir>选项
- ldconfig gcc -soname
- Windows下高精度定时器讨论
- 【金融财经】金融市场一周简报(2017-12-08)
- JAVA代码注释模板
- 初识Python-列表的使用
- vim笔记
- GCC选项_-Wl,-soname
- Java基础知识小清单(一)
- Zuul (SpringCloud学习笔记一) 转
- 如何在新建的eclips的工作空间部署开发环境
- 关于AIDL中Map参数传递的问题
- java实现单链表的简单划分
- printDocument和printPreviewDialog的一些设置
- RTP协议分析
- Java【集合系列】-10-HashMap详细介绍(源码解析)和使用示例