有时候为了方便,需要在编译时绑定共享库的搜索路径,这只需要设定链接器ld的参数即可,参数名为:-rpath,后面跟逗号分隔的路径,如:-rpath=/usr/lib,gcc如下使用:
gcc -Wl,-rpath=/usr/lib,这样运行时,就不需要设定LD_LIBRARY_PATH环境变量了。
-Wl的使用可以方便直接将链接需要的库,或者参数传递给链接器
-Wl.option
此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然
后传递给会连接程序.
-Wl选项告诉编译器将后面的参数传递给链接器。
-soname则指定了动态库的soname(简单共享名,Short for shared object name)
soname的关键功能是它提供了兼容性的标准:
当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。
在Linux中,应用程序通过使用soname,来指定所希望库的版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容的,这使得程序员摆脱了共享库版本冲突问题的困扰。
可以通过readelf -d来查看每个动态库的SONAME
本文详细解释了如何在编译时绑定共享库的搜索路径,并介绍了soname的功能,以及它如何提供兼容性标准,使得在Linux环境下升级共享库变得容易。
2626

被折叠的 条评论
为什么被折叠?



