複数のライブラリにリンクされた 1 つのプロセスで構成される Redhat でビルドされたアプリケーションを使用しています。すべてのライブラリを共有ライブラリとしてビルドすると正しく動作しますが、ライブラリを静的ライブラリとしてビルドすると正しく動作しません。どちらの場合も正しくリンクしているようです (少なくとも未定義の参照はありません)。
アプリケーションとライブラリはかなり複雑なので、コードをステップ実行して問題を探していません。共有バージョンと静的バージョンの両方でまったく同じソース コードを作成しているため、コードの問題であるとは考えられません。
この種の問題の考えられる説明は何ですか? ソースに使用したビルド コマンドと、それぞれの場合のライブラリを含めました。
共有オブジェクトの作成に使用するコマンド:
g++ -fPIC -shared -Wl,-as-needed -m64 -Wl,soname,.. -o ... -LANG:std -Wl,--warn-once <object files>
スタティック ライブラリの作成に使用するコマンド:
ar cr <libname> <object files>
ソース ファイルのビルドに使用するコマンド (両方の場合):
g++ -fPIC -m64 -c -Werror -Wno-deprecated -g
共有ライブラリをサポートしていない別のプラットフォームにこれを移植する予定であるため、アプリケーションを静的ライブラリで動作させる必要があることに注意してください。ここにいる誰かがこの問題を以前に見たことがあり、続行する方法についてアドバイスをくれることを願っています. そうでない場合、私の次のオプションは、コードのデバッグを開始して、両方のケースでアプリケーションがどのように実行されるかを比較することです。
これが原因であると私が考えることができる唯一のことは、静的ライブラリのリンク順序が正しくないことです.リンカはライブラリの1つから間違った関数を引き出しています. でもこれだと、どこかで「複数定義」エラーが発生するのではないかと思います。