我编译了与libstdc ++动态链接的共享库。所以使用GLIBCXX_3.4.11。我想将我的代码发送给stdc ++库只有版本3.4.10的人。而不是要求他更新他的库版本(这是一个软件客户,所以我不能假设他们愿意或能够更改系统文件)我想发布相应版本的libstdc ++。所以,放在一个lib文件夹,包含我的代码的目录位置。如何获取自己的代码以使用适当的(稍后)版本?我发现/etc/ld.so.conf包含目录/ lib64,其中有一个令人讨厌的旧版libstdc ++。so。设置LD_LIBRARY_PATH不会覆盖它。这似乎偏离advertised行为。知道为什么会这样吗?我如何完成相当简单的任务?
感谢。
答案 0 :(得分:2)
我知道这个问题已经过时了,但我在尝试解决自己的链接问题时发现了这个问题。您必须针对libstdc ++版本构建程序,该版本与您同事的库版本兼容。当然,最简单的解决方案是链接他的库版本,这样他就不需要对他的库进行特殊调整来链接你的库。
为此,您需要安装一个可以构建二进制兼容库的GCC版本,以便您可以实际链接到他的libstdc ++版本。 GLIBCXX_3.4.11来自gcc-4.4及更高版本,因此您需要gcc-4.3。使用这个来构建你的程序,你应该处于良好的状态。
您可以参考以下页面获取库ABI兼容性列表: http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
您还可以构建一个rpm / deb,它需要您已经拥有的libstdc ++版本,如果它不可用,请拒绝安装。这给了你一个接口,让他承诺,如果他的系统设置正确的依赖,他可以使用你的库。从这个意义上说,它就像你的图书馆在你做的和不支持你的图书馆时松散的SLA。
希望有所帮助!