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_를 지원하지 않습니다. Occam의 면도기는 C++이라고 알려줍니다. – Olaf
C입니다. N_method를 자리 표시 자로 사용하고 있습니다. – Red