我有一个我开发的库A. 当我在机器上部署它时,相应的libA.so和libA-XYZso放在/ usr/lib(XYZ是版本号)中.
现在我开发了一个使用A的库B.当我链接B时,我使用标志-lA.然后" ldd libB.so "给了我:
(...) libA-X.Y.Z.so => /usr/lib/libA-X.Y.Z.so (...)
我的问题是,当我发布新版本的A(XYZZ)时,我还必须发布新版本的B.否则,安装最新版本A的人将无法安装B,它将寻找版本XYZ哪个不存在.
我该如何解决这个问题?我如何告诉B寻找libA.so而不是libA-XYZso?或者这样做是不对的?甚至不安全?
更新1:库A(我从其他人继承)使用autotools.
更新2:当我建库中,我可以看到:"轮候册,-soname轮候册,libA-0.6.1.so".如果我理解正确,这意味着我们强迫soname为libA-0.6.1.so.是对的吗 ?现在我的问题是我不知道如何在使用autotools的项目中修改此行为.我用谷歌搜索了一段时间,但找不到任何有用的信息.我应该修改configure.in还是Makefile.am?
创建libA.so时,将-soname选项传递给链接器(如果通过gcc进行链接,请使用-Wl,-soname).然后,当B链接时,链接器通过其soname引用A,而不是通过其文件名.在目标系统上,确保您拥有从soname到真实文件的链接.看到
http://www.linux.org/docs/ldp/howto/Program-Library-HOWTO/shared-libraries.html