ここに状況がありますが、最近のGCC(4.3.3)を使用しているC ++コードベースがありますが、GCC 3.2.3を使用してビルドされた古いライブラリとリンクする必要があります。利用可能なライブラリの新しいバージョンはありません、私はそれなしで行くことはできません、それは再構築することはできませんので、クローズソースです。
これは、GCC 4.3.3と3.2.3の間にABIの非互換性があるので、問題を提起するように思われるので、私はこれを解決するために私のオプションが何であるかを見極めようとしています。
いくつかの追加の詳細:
- コードベースのすべてを-fabi-version = 1で再構築して正しいABIバージョンを取得できますが、libstdc ++バージョン6の新しい機能に依存しています。
- コードベース外のすべてのC ++ライブラリの依存関係はオープンソースなので、この1つのライブラリを除き、必要に応じて再構築できます。
- リビルドできない、または再構築が困難な多くのCライブラリ依存関係。
- 古いライブラリはいくつかのlibstdc ++バージョン5の機能に依存しているようです
私はこれまでに試したことがあります:
- すべてのC ++コードと依存ライブラリを-fabi-version = 1でリビルドし、libstdc ++バージョン6とリンクします。これは、C ++標準ライブラリシンボルの未定義のシンボルエラーがいくつか発生して失敗します。
- 上記と同じですが、libstdc ++ 5の共有ライブラリにリンクされていますが、これはリンカの問題を解決しますが、実行時に2つのバージョンがレガシーライブラリ内で混在してクラッシュする原因になります。
このページは次のとおりです: http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html これは、ライブラリ間のさまざまな依存関係を満たすためにアプリケーションでC ++ ABIのバージョンを混在させることが可能であることを示すようです。しかし、私は何かが欠けていない限り、ここでうまくいくとは思われません。
何か案は?