我已經編譯靜態庫,和外觀(簡體)是這樣的:連接器找不到的功能,即使他們是在一個靜態庫
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(...)'
但是,當我檢查我的靜態庫與納米:
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
顯示更多的源代碼,並給出實際的編譯過程(或'Makefile')。 –
我使用qmake,它反過來生成makefiles。 你只需在project.pro文件中指定'SOURCES =(cpp文件)'和'HEADERS =(頭文件)',它會照顧它,有點像CMake –