アプリケーションは同時に 2 つの異なるバージョンの libstdc++ に依存できますか? (例: libstdc++5 と libstdc++6)? シナリオは - 一部のバイナリは libstdc++ 6 に依存していますが、libstdc++5 に依存する .so をロードします...
それはうまくいく可能性がありますか?
最も重要なことは、これら 2 つのバージョンのライブラリにバイナリ互換性があるかどうかを確認する必要があることです。たとえば、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 は発生しなくなりました。
したがって、両方にリンクすることはできません。
ジョン