私が取り組んでいるプログラムは、3rdPartyLibrary.libに静的にリンクされています。Linux用のコードで異なるバージョンのライブラリを混在させる
同じ3rdPartyLibraryの新しいバージョン、たとえば3rdPartyLibraryNewVersion.libを利用したかったのです。
したがって、動的にリンクされたライブラリとして3rdPartyLibraryNewVersion.soをインクルードし、wrapper.soというラッパーダイナミックライブラリを使用してインクルードします。 3rdPartyLibraryの新バージョンと旧バージョンの両方を同時に使用することを望んでいますが、プログラムの別のパーティで使用しています。
私たちが持っている解決策は、古い3rdPartyLibraryを静的にリンクし、同時に3rdPartyLibraryNewVersionにラッパーライブラリに動的にリンクすることです。
プログラム---静的にリンク---> 3rdPartyLibrary.lib。 ---動的リンク - >ラッパー.so ---動的リンク---> 3rdPartyLibraryNewVersion.so。
これは可能ですか?
私たちが遭遇した問題は、wrapper.soがテスト実行ファイルで動作していたのに対し、3rdPartyLibrary.libに静的にリンクされているプログラムからラッパーが呼び出されたときに3rdPartyLibraryNewVersion.so内で失敗したことです。
私は間違っていましたか?
私はそれが失敗した どのようあなたが言及するのを怠っ...正しい方法は3rdPartyLibrary.libに我々のコードを更新することですが、それはあまりにも退屈であるおかげで、
ティム
私は滑りやすい道を行くと知っていますが、別の道は簡単ではありません。 いずれの場合でも、プログラムのコアファイルは、gdbによると3rdPartyLibraryNewVersion.so内でプログラムがクラッシュしたことを示していました。 SIGSEGVが送信される前に、ThirdPartyLibraryNewVersion内のいくつかの内部呼び出しが行われました。 名前空間の衝突について詳しく説明できますか。 リンクされているラッパーライブラリーは3rdPartyLibraryNewVersionを呼び出します(または私が思う)、プログラムが混乱し、静的にリンクされたライブラリーと呼ばれることを意味しますか? –