我正在使用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