C 라이브러리를 컴파일하려고하는데 외부 C 코드가 좋아서 라이브러리의 심볼을 찾는 외부 코드에 문제가 있습니다. 나는 큰 영화를 이해하지 못하고 누군가가 도울 수 있기를 바라고 있습니다. 세부 사항은 다음과 같습니다.외부 라이브러리에 연결할 때 심볼 이름에 언더 바아
1) 저는 Mac에서 일하고 있습니다. xcode에 정적 .a 라이브러리로 라이브러리를 컴파일했습니다.
2) 라이브러리에서 함수를 호출하는 외부 코드를 컴파일하려고합니다. 헤더 파일을 포함 시켰고 gcc 호출에서 위치와 라이브러리를 지정했습니다. 컴파일이 정상적으로 완료된 것처럼 보이지만 링크가 실패하면 심볼을 찾을 수 없다는 오류가 발생합니다.
3) 누락 된 기호는 FunctionName이 내가 호출 한 함수의 이름 인 _FunctionName으로 나열됩니다.
왜 컴파일러/링커가 내 함수 이름에 언더 바를 추가했는지 분명하지 않습니다. 하지만 내 순진한 추측은 그것이 도서관에서 기호를 찾을 수없는 이유입니다.
외부 코드 컴파일은 백그라운드에서 gcc 호출을 수행하는 MATLAB의 mex() 함수를 통해 수행됩니다.
누구나 갖고있는 생각에 감사드립니다.
gcc-4.2 -c -Igsf_0303/ -I/Applications/MATLAB_R2011b.app/extern/include \
-DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -arch x86_64 -isysroot \
/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions \
-DMX_COMPAT_32 -O2 -DNDEBUG "gsf_tester.c"
gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl, \
-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,\
-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map \
-o "gsf_tester.mexmaci64" gsf_tester.o gsf_0303/libgsf.a \
-L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
Undefined symbols:
"_gsfOpen", referenced from:
_mexFunction in gsf_tester.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
mex: link of ' "gsf_tester.mexmaci64"' failed.
은 무엇 이름 당신의 기호 라이브러리에 있나요의 구조를 확인? ('nm -g library.a'를 실행하여 파일 library.a에 내 보낸 모든 기호를 나열하십시오.) –
밑줄을 붙이면 컴파일러가 컴파일시 C 함수의 이름을 지정하는 일반적인 방법입니다. 'mexFunction' 오류 메시지에서 볼 수 있듯이 또한 가지고 있습니다. 'gfsOpen'을 포함하고있는 파일이 정말 라이브러리에 추가 되었습니까? –