应用程序可以依赖两个不同版本的 libstdc++ 吗?

发布于 2024-07-16 19:49:59 字数 147 浏览 10 评论 0原文

一个应用程序可以同时依赖两个不同版本的 libstdc++ 吗? (例如:libstdc++5 和 libstdc++6)? 场景是 - 某些二进制文件依赖于 libstdc++ 6 但加载了依赖于 libstdc++5 的 .so...

这有可能工作吗?

Can an application depend on two different versions of libstdc++ at the same time? (e.g.: libstdc++5 and libstdc++6)? The scenario being - some binary depends on libstdc++ 6 but loads an .so that depends on libstdc++5...

Will that have any chance of working?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情丝乱 2024-07-23 19:49:59

最重要的是,您需要检查这两个版本的库是否二进制兼容。 例如,G++ 3.3 和 3.4 就不是。

即使他们是:
* 可能存在名称修改问题
* 你不能进行跨模块分配/释放(无论如何都是一个坏主意)
* 您可能无法使用 STL 解决模块问题

Most importantly, you need to check if those two versions of the library are binary compatible or not. G++ 3.3 and 3.4 are not, for example.

And even if they are:
* There can be name mangling issues
* You cannot do cross module allocation/deallocation (a bad idea anyway)
* You probably can't work around modules with STL

战皆罪 2024-07-23 19:49:59

我最近刚刚将一个 C++ 应用程序从 AS3/GCC323 移植到 AS4/GCC346。 尽管应用程序本身链接到 libstdc++.so.6,但它链接到的一些库仍然链接到 libstdc++.so.5。 尽管构建成功,但当我尝试运行它时,它还是 SEGV。

当我在 AS4/GCC346 上重新编译库后,应用程序和库仅链接到 libstdc++.so.6,并且 SEGV 不再出现。

所以我想说答案是否定的,你不能同时链接到两者。

乔恩

I just recently ported a C++ application from AS3/GCC323 to AS4/GCC346. Although the app itself linked to libstdc++.so.6 some of the libraries it linked to were still linking to libstdc++.so.5. Depsite building successfully it SEGV'ed when i tried to run it.

Once I recompiled the libraries on AS4/GCC346 as well, the app and the libraries only linked to libstdc++.so.6 and the SEGV's no longer occurred.

So i would say the answer is no you can't link to both.

Jon

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文