当前位置:  开发笔记 > 编程语言 > 正文

C++:如何链接libA.so而不是libA-XYZso

如何解决《C++:如何链接libA.so而不是libA-XYZso》经验,为你挑选了1个好方法。

我有一个我开发的库A. 当我在机器上部署它时,相应的libA.solibA-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?



1> Martin v. Lö..:

创建libA.so时,将-soname选项传递给链接器(如果通过gcc进行链接,请使用-Wl,-soname).然后,当B链接时,链接器通过其soname引用A,而不是通过其文件名.在目标系统上,确保您拥有从soname到真实文件的链接.看到

http://www.linux.org/docs/ldp/howto/Program-Library-HOWTO/shared-libraries.html

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有