これを単純にしておきます。A.lib、libB.so(A.libを使用)、C.exe(libBを使用します。そう)。注:これはLinuxであり、Windowsではありません。私はバイナリタイプ/目的を伝えるために.exeを使用しています。g ++の.soとリンクすると、未定義の参照が返されます。
私は単なるテストプログラムなので、コマンドプロンプトからC.exeをコンパイルしてリンクしようとしています。これは私が使用している行です:
g++ -I../include C.cpp -o C.exe -L../lib -lB
結果は、A.libにあるものへの多くの未定義の参照です。 libB.soからエクスポートされたものを参照するエラーはありません。
私はその同じディレクトリにlibB.soをコピーして、このコマンドを使用する場合:
g++ -I../include C.cpp -o C.exe -lB
結果はC.exeが構築され、エラーなしで実行することが可能です。
libB.soがビルドされると、ビルドに使用されたlibsは必要ありません。それにもかかわらず、私は最終的な試みとして何かを試みると思った。 A.libをlibB.soと同じlibディレクトリにコピーし、元のbuildコマンドをもう一度試しました。結果は同じでした。
すべてのご意見をいただきました。
'libB.so'はどうやってリンクしましたか?明示的に 'A.lib'とリンクしましたか? –
'-L'に加えて、' -R'オプションを使います。詳細は 'ld'のmanページを参照してください。 –
ちなみに、 'A'ライブラリは静的*ライブラリか*動的*ライブラリですか? –