0

一連のライブラリ (.a および .so) ファイルにリンクした後に構築した共有オブジェクト (abc.so) があります。これで、この abc.so は 3 つの関数を公開するだけです。

現在、この abc.so を使用してこれらの関数を呼び出すコンソール アプリケーションを Linux で作成しています。そのアプリケーションをビルドしようとすると、

「xxxxxxx」への未定義の参照」というエラーが大量に発生します。現在、これらの参照は、abc.so が abd に依存している so に移動し、それらの so 内の参照についてはさらに深くなります。

なぜこれが起こるのかわかりません。実行時にそれらをロードするべきではありませんか? 少なくともそれは私が考えたことです(Windows / MSVCのバックグラウンドから来ています)。

これについて私を助けてください。

4

2 に答える 2

2

アプリケーションを、アプリケーションが依存するすべての共有オブジェクト(.so)への参照にリンクする必要があります。静的に含まれているアーカイブと再リンクする必要はありません(.a)

abc.soがa.so、b.so、およびcaで構築されている場合は、アプリケーションをabc.so、a.so、およびb.soにリンクする必要があります。

アプリケーションが正しくリンクされている場合は、共有オブジェクトを見つけることができることも確認する必要があります。'ldd myapp'を使用して、共有オブジェクトの依存関係を一覧表示できます。

my2c

于 2010-06-24T14:26:16.770 に答える
1

ライブラリ ファイルに対してリンクする必要がありますが、.so ファイルとリンクすることにより、実行時に共有ライブラリからシンボルを読み込む必要があることをリンカーに伝えます。リンカー コマンド ラインはどのように見えますか?

LD_LIBRARY_PATH も確認してください。共有ライブラリが などの標準的な場所にない場合は、次の/usr/libことを行う必要があります。

export LD_LIBRARY_PATH=pathToDirWithYourSharedLibrary:$LD_LIBRARY_PATH

そうしないと、実行時エラーが発生します。

于 2010-06-24T14:19:34.793 に答える