コンパイルする静的ライブラリがあり、次のように(簡略化されて)表示されます。
math_util.h :
void foo(...);
math_util.cpp :
void foo(...) { ... }
A.cpp :
#include "math_util.h"
class A
{
bar() {
foo(...);
}
}
静的ライブラリは正常にコンパイルされます。A
ただし、実際のアプリで使用したい場合は、次のようになります。
undefined reference to `foo(...)'
しかし、 nm で静的ライブラリをチェックすると:
math_util.o:
U _GLOBAL_OFFSET_TABLE_
000000000000010a T _ZN8fooEPA2_dPdj
foo
のコードを A.cppにコピーすると問題なく動作するため、これはプロトタイプの問題ではありません。
それで、私はそれを理解していません.静的ライブラリに明らかに存在するにもかかわらず、なぜG ++はシンボルを見つけられないのですか? 他の機能ではこの問題はありません。
注: QtCreator を使用して Linux を実行しており、両方のプロジェクトで qmake を使用しています (ただし、静的ライブラリは純粋な STL C++ であり、Qt は関与していません)。
編集:実際の関連ファイルを表示するには:
https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/math_util.h
https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/math_util.cpp
A.cpp :
プロジェクトファイル:
https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/libnoisered.pro