在分发api库时,对.so版本和链接策略感到困惑

时间:2013-07-22 15:00:01

标签: c++ shared-libraries version

我们一直在将Java API移植到C ++,并为Linux创建库文件(.a文件)。我们的API依赖于boost框架和log4cxx。 (我们与第一个用户讨论了这个问题,他们对这些依赖关系没问题。)

当我编译一个使用我们库文件的示例应用程序时,它会链接到依赖项的.so文件(libboost_system.so,libboost_thread.so和liblog4cxx.so)。当应用程序运行时,它需要为每个.so文件找到特定的版本化文件名,例如liblog4cxx.so.10。

如果用户正在使用更新版本的boost(例如),他/她是否能够链接到他们的本地版本并运行更新的版本(假设兼容性)?是否有其他方法来处理这些版本/依赖项(即您尝试将外部引用的库链接到您自己的库)?

1 个答案:

答案 0 :(得分:1)

是的,程序可以使用兼容的界面链接到更新的库。文件名中的数字编码库应用程序二进制接口(ABI)。

FreeBSD的handbook提供了有关库版本控制的更多信息。基本规则是:

  • 从1.0开始
  • 如果存在向后兼容的更改,请修改次要编号(请注意,ELF系统会忽略次要编号)
  • 如果存在不兼容的更改,请更改主要编号

链接器将整理细节以使用具有兼容接口的最新库版本。 stackoverflow上还有更多可用信息here