gpt4 book ai didi

c++ - 在 Linux 中使用 gcc 4.1 编译的 C++03 应用程序中使用 C++11 共享库?

转载 作者:行者123 更新时间:2023-11-30 02:22:20 25 4
gpt4 key购买 nike

在经历了一些类似的问题(见下文)后,我认为没有任何一个涵盖这种情况。

问题

是否可以从使用 gcc 4.1 编译的 C++03 应用程序 dlopen 和使用使用 gcc 4.9 编译的 C++11 共享库?库和应用程序都使用 libstdc++,包括 API(但不是 std::list,这显然是个问题)。我无法更改应用程序的编译方式(很遗憾),并且必须确保现有代码不会中断(例如,如果它最终动态链接到新版本的 libstdc++.so)。

据我了解(不是很了解),在 Linux 上,动态链接器使用平面命名空间,这意味着不可能在两个库中定义相同的符号。将库静态链接到较新的 libstdc++ 是否有帮助,或者是否有其他方法?

一些类似的问题似乎没有回答这个问题

最佳答案

如果你这样做,你肯定需要使用更新的libstdc++.so.6,它应该与基于GCC的系统libstdc++.so.6兼容4.1(在 GCC 上游打算为库保留 ABI 兼容性的意义上)。使用 GCC 4.9 编译器附带的 libstdc++.so.6 库是个好主意。

一旦你这样做了,它应该就可以工作了,除非你遇到了你已经列出的几个兼容性陷阱,并且只要库接口(interface)的 C++ 部分实际上坚持 C++98 子集,不使用任何在语言子集中无法表达的构造。

所有这些都假设库实际上是在使用 GCC 4.1 的系统上编译的,它可能有类似 glibc 2.5 的东西。如果该库是在一个完全不同的更新系统上编译的,那么您可能会遇到 libstdc++.so.6 之外的库兼容性问题,并且这些库往往更难升级。

(也有可能该库被显式编译用于基于 4.1 的系统 libstdc++.so.6 并且一切正常,就像变魔术一样,但那样你就不会我想是在这里问吧。)

关于c++ - 在 Linux 中使用 gcc 4.1 编译的 C++03 应用程序中使用 C++11 共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47309819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com