Linker 针对libB.so、libB.so.3或libB.so.3.0的共享链接?

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.

假设我想创建一个库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.0
,但我猜这方面也有最佳实践

推荐什么?为什么

推荐什么?为什么

只支持针对
libB.so
的链接。针对libB.so.3或libB.so.3.0的链接或多或少是出于偶然;不要这样做


您可以阅读有关外部库版本控制的内容。

参考资料中的第一句话是:“对共享对象的运行时引用应始终引用版本控制的文件名。”--这听起来像是我应该链接到
libB.so.3
@Nico:“这听起来像是我应该链接到libB.so.3”--不,不是。再次阅读文档。请特别注意
SONAME
。当您链接到
libB.so
时,如果它有
SONAME
,链接器将自动在可执行文件的动态部分记录
libB.so.3