应用程序可以依赖两个不同版本的 libstdc++ 吗?
一个应用程序可以同时依赖两个不同版本的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最重要的是,您需要检查这两个版本的库是否二进制兼容。 例如,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
我最近刚刚将一个 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