我有一个我开发的库A。当我在机器上部署它时,相应的libA.so和libA-X.Y.Z.so放在/ usr / lib中(X.Y.Z是版本号)。
现在,我开发一个使用A的库B。当我链接B时,我使用标志-lA。然后“ldd libB.so”给我:
(...)
libA-X.Y.Z.so => /usr/lib/libA-X.Y.Z.so
(...)
我的问题是,当我发布A的新版本(XYZZ)时,我还必须发布B的新版本。否则,安装最新A的人将无法安装B,而B会寻找该版本XYZ不存在。
我该如何解决这个问题?如何告诉B寻找libA.so而不是libA-X.Y.Z.so?还是这样做是错误的?甚至不安全?
更新1 :库A(我从别人那里继承来的)使用自动工具。
更新2 :构建库A时,我可以看到:“-Wl,-soname -Wl,libA-0.6.1.so”。如果我正确理解,则意味着我们正在将soname强制为libA-0.6.1.so。那正确吗 ?现在我的问题是我不知道如何在使用自动工具的项目中修改此行为。我搜索了一段时间,但找不到任何有用的信息。我应该修改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
关于c++ - C++:如何链接libA.so而不是libA-X.Y.Z.so,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/252819/