1

私のプロジェクトはACEライブラリを使用しており、別のライブラリlibsdk.soをリンクする必要があります。別のバージョンのACEライブラリを使用しています。

次のようなリンク順序:...-lMyAce -lsdk -lAnotherAce

アプリケーションの実行中に、libsdk.soがMyAceのメソッドを呼び出し(コアダンプを確認しました)、アプリケーションがクラッシュします。

リンクの順序を次のように変更した場合:...-lsdk -lAnotherAce -lMyAce

私のコードはAnotherAceのメソッドを呼び出しましたが、これもクラッシュします。

ACEのみをリンクすると、クラッシュします。AnotherAceのみをリンクする場合は、リンクエラーが発生します。

libsdk.soがそのACEライブラリを呼び出し、私のコードが私のACEライブラリを呼び出すようにします。どうすれば問題を解決できますか?

4

1 に答える 1

1

Solaris リンカには役立つオプションがありますが、アプリケーションを実際に再設計して、同じプログラム内で同じ名前のライブラリ セットを 2 つ必要としないようにするのが最善の解決策です。

Direct Bindingsは、シンボルを見つけたライブラリまたはプログラムごとに記録します。そのため、libsdk.so が -B direct -lAnotherAce でビルドされている場合、MyAce ではなく、AnotherAce に移動する各参照が記録されます。次に、コードを -B direct -lsdk -lMyAce (libsdk の依存関係が処理するため、-lAnotherAce を含めないでください) でリンクすると、コードはそれが MyAce への呼び出しであることを記録します。

于 2013-01-15T16:55:32.973 に答える