Linker 针对libB.so、libB.so.3或libB.so.3.0的共享链接?
假设我想创建一个库a,该库链接到另一个(系统)库B,其中安装了以下文件:Linker 针对libB.so、libB.so.3或libB.so.3.0的共享链接?,linker,dynamic-linking,abi,Linker,Dynamic Linking,Abi,假设我想创建一个库a,该库链接到另一个(系统)库B,其中安装了以下文件: $ ll /usr/lib/libB* libB.so -> libB.so.3 libB.so.3 -> libB.so.3.0 libB.so.3.0 在创建我自己的libA.so*时,我认为最好在链接行中包含libB.so*中的任何一个。事实上,链接器标志-Wl,--no undefined甚至强制执行此操作 上面哪个libB文件用于链接似乎没有什么区别,因为它们最终都指向同一个文件libB.so.3.
$ ll /usr/lib/libB*
libB.so -> libB.so.3
libB.so.3 -> libB.so.3.0
libB.so.3.0
在创建我自己的libA.so*
时,我认为最好在链接行中包含libB.so*
中的任何一个。事实上,链接器标志-Wl,--no undefined
甚至强制执行此操作
上面哪个libB
文件用于链接似乎没有什么区别,因为它们最终都指向同一个文件libB.so.3.0
,但我猜这方面也有最佳实践
推荐什么?为什么
推荐什么?为什么
只支持针对libB.so
的链接。针对libB.so.3或libB.so.3.0的链接或多或少是出于偶然;不要这样做
您可以阅读有关外部库版本控制的内容。参考资料中的第一句话是:“对共享对象的运行时引用应始终引用版本控制的文件名。”--这听起来像是我应该链接到
libB.so.3
@Nico:“这听起来像是我应该链接到libB.so.3”--不,不是。再次阅读文档。请特别注意SONAME
。当您链接到libB.so
时,如果它有SONAME
,链接器将自动在可执行文件的动态部分记录libB.so.3
。