2013-07-22 1 views
0

정적 라이브러리 libTheLib.a (다른 누군가가 컴파일 함)이 있습니다. 내 프로그램과 연결하려고합니다. 이 lib가 연결에 필요한 기능 중 하나는 GetName입니다. 나는 내 프로젝트에 함수 void GetName(char*, int)을 가지고 있지만 링커는 여전히 심볼이 발견되지 않는다고 불평하고있다. lib가 다른 서명을 가진 함수를 찾고 있을지도 모릅니다. 나는 그것이 정확히 찾았다되는 내용 공개 바라고 nm를 사용했지만, 그것이 말하는 모든 매우 도움이되지 않습니다정적 라이브러리에서 외부 심볼의 예상 된 심볼

  U _GetName 

입니다. 찾고있는 심볼의 서명을 찾는 또 다른 방법이 있습니까? 또는 서명이 기호의 일부가 아니며 실제로 해당 이름의 기호에 연결할 수 있습니까?

은 lib가 C++에, C에 내 프로그램을 작성하지만,이 clang하지 gcc을 사용하고 또한

extern "C" GetName(char* c, int i) {...} 

로 차이 (사용 엑스 코드)를 만드는 경우 함수는 선언

+0

C에서 이름 변환은 없으므로 기능 서명을 쉽게 찾을 수 없습니다. 정확한 링커 오류는 무엇입니까? –

+0

@ H2CO3 오류 : '정의되지 않은 기호 : "_GetName", libTheLib.a (bar.o)의 foo에서 참조 됨 ld : 기호를 찾을 수 없음 – baruch

+0

정말 'extern' .cpp 파일에서 볼 때 C ""? 이름 mangling 문제처럼 보인다. –

답변

0

1) 함수 이름과 서명이 맞습니까?

2) 당사

extern "C" GetName(char* c, int i) {...} 

대신

extern "C" GetName(char* c, int i); 

?

+0

1) 함수 이름이 정확합니다. 서명은 정확히 내가 알아 내려고 시도하는 것입니다. 2) 실제 기능이므로 감속이 아닙니다. '... '는 단지 현재 문제와 무관 한 코드가 더 있음을 의미합니다. – baruch

+0

@baruch 당신은'extern "C"void GetName (char * c, int i);'시도 했습니까? –

+0

예, '보이드'입니다. 그 질문에 단지 오타였습니다. – baruch

관련 문제