ライブラリからエクスポートされた関数とクラスを使用しようとしている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