1

我已经使用 GLIBCXX_3.4.11 编译了针对 libstdc++.so 动态链接的共享库。我想将我的代码发送给 stdc++ 库仅为 3.4.10 版本的人。而不是要求他更新他的库版本(这是一个软件客户,所以我不能假设他们愿意或能够更改系统文件)我想发布适当版本的 libstdc++.so,放置在lib 文件夹,其中包含我的代码的目录位置。如何获得自己的代码以使用适当的(更高版本)版本?我发现 /etc/ld.so.conf 包含目录 /lib64,其中存在有问题的旧版本 libstdc++.so。设置 LD_LIBRARY_PATH 不会覆盖它。这似乎偏离了宣传的行为。知道为什么会这样吗?我如何完成我相当简单的任务?

谢谢。

4

1 回答 1

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,你做什么和不支持什么。

希望有帮助!

于 2011-09-05T12:18:07.327 回答