一个应用程序可以同时依赖于两个不同版本的 libstdc++ 吗?(例如:libstdc++5 和 libstdc++6)?场景是 - 一些二进制文件依赖于 libstdc++ 6,但加载了一个依赖于 libstdc++5 的 .so ......
那会有工作的机会吗?
最重要的是,您需要检查这两个版本的库是否二进制兼容。例如,G++ 3.3 和 3.4 不是。
即使它们是: * 可能存在名称修改问题 * 您不能进行跨模块分配/释放(无论如何都是个坏主意) * 您可能无法使用 STL 处理模块
我最近刚刚将一个 C++ 应用程序从 AS3/GCC323 移植到了 AS4/GCC346。虽然应用程序本身链接到 libstdc++.so.6,但它链接到的一些库仍然链接到 libstdc++.so.5。当我尝试运行它时,Depsite 成功构建了 SEGV。
一旦我在 AS4/GCC346 上重新编译了库,应用程序和库仅链接到 libstdc++.so.6 并且 SEGV 不再发生。
所以我会说答案是否定的,你不能链接到两者。
乔恩