我正在使用Apple LLVM版本8.0.0(clang-800.0.42.1)進行編譯。它大約有1200個文件,但我之前使用過它們。我去編譯它們,沒有問題。然後我製作我的靜態庫(ar rcs libblib.a *.o
),沒問題。所以當我嘗試使用我的全新庫時,我遇到了我的問題。靜態庫鏈接問題定義符號的「未定義符號」
gcc main.c -L. -lblib
Undefined symbols for architecture x86_64:
"_N_method", referenced from:
_main in main-7fc584.o
ld: symbol(s) not found for architecture x86_64
但是,我知道這是定義。我檢查是否包含該文件(ar -t libblib.a | grep N_METHOD.o
),它在那裏。檢查源文件,並且有方法,正如它在頭文件中一樣命名。我在這裏有什麼問題?我完全失去了,我希望我錯過了一些簡單的事情。
我做nm -g N_METHOD.o
和回來:
0000000000000000 T __Z8N_methodP6stacks
庫是用C還是C++編寫的?如果它是C++,名稱將會被破壞。 – Barmar
@Barmar:C不支持_methods_,奧卡姆的剃刀告訴我這是C++ ;-) – Olaf
這是C.我只是使用N_method作爲佔位符。 – Red