dynamic - libstdc++ 的库搜索路径

标签 dynamic linker libstdc++

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

谢谢。

最佳答案

我知道这个问题很旧,但我在尝试解决我自己的类似链接问题时发现了它。您必须根据与您同事的库版本兼容的 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++ 版本,如果不可用,请拒绝安装。这为您提供了一些接口(interface),这给了他一个 promise :如果他的系统设置了正确的依赖项,他就可以使用您的库。从这个意义上说,它就像是针对您支持和不支持的内容的库的松散 SLA。

希望有帮助!

关于dynamic - libstdc++ 的库搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546159/

相关文章:

c++ - 静态链接可以导致执行一些初始化例程吗?

linux - Fedora 上的 Flutter 错误 - 下载的可执行文件无法在主机上执行

c++ - 避免/设置 std::cout/std::cerr 的字符集转换/编码

JavaScript:使动态类可点击——为什么不起作用?

c++ - 动态数组只从程序返回第一个元素

R Shinydashboard 根据选项卡选择显示/隐藏 UI 元素

android - 我想编写一个动态添加 View 的类,如按钮或 TextView 或

c++ - 未定义的 pthread 引用甚至使用 lpthread 创建

c - 链接器如何处理共享对象 (.so) 中的函数 main()?

c++ - 为什么使用 fopen 打开流并使用读/写(而不是 fread/fwrite)执行 I/O