3

ライブラリからエクスポートされた関数とクラスを使用しようとしているC++ライブラリとC++アプリケーションがあります。ライブラリは正常にビルドされ、アプリケーションはコンパイルされますが、リンクに失敗します。私が得るエラーはこのフォームに従います:

app-source-file.cpp:(。text+0x2fdb): `lib-namespace :: GetStatusStr(int)'への未定義の参照

ライブラリ内のクラスはリンカによって問題なく解決されているように見えますが、フリー関数とエクスポートされたデータ(コサインルックアップテーブルなど)は常に上記のエラーになります。

私はUbuntu8.04(Hardy)を使用していますが、最新のUbuntuパッケージで最新です。

ライブラリをリンクするコマンドは次のとおりです(他のライブラリは削除されています)。

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

アプリケーションをリンクするコマンドは次のとおりです(他のライブラリは削除されています)。

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

最後に、問題のシンボルが適切にエクスポートされているように見えます(私が知る限り):

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
4

2 に答える 2

8

nm出力の_ZN3lib-namespace12GetStatusStrEiの前のUは、シンボルがライブラリで未定義であることを示しています。

間違った名前空間で定義されている可能性があります。lib-namepaceで呼び出しているように見えますが、別の名前空間で定義している可能性があります。

于 2008-10-19T14:12:10.037 に答える
2

長くなりましたが、 -l オプションで lib を指定すると lib 接頭辞をスキップしていませんか?

(以下の例を読みやすくするために、名前を「lib-in-question.so」から「libfoobar.so」に変更しました)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

また

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
于 2008-10-19T14:45:00.767 に答える