2011-09-23 2 views
3

일부 리팩토링을 수행해야하는 일부 요구 사항 변경으로 인해 C 동적 라이브러리가있었습니다.C 컴파일러에서 동적 라이브러리의 링크 문제 C++ 코드

하나의 C 파일에 다음 코드가 있습니다.

__attribute__((noinline)) 
static void *find_document(...) 
{ 
    ... 
} 

bool docuemnt_found(const char *name) { 
... 
    find_document(...); 
... 
} 

다른 cpp 파일에서 docuemnt_found() 함수를 구분했습니다. 이제 docuemnt_found() 함수는 find_document() 메서드에 연결할 수 없습니까?

나는 c 파일에 대한 헤더를 작성한 다음 extern "C"을 사용하여 헤더를 포함 시키려고했지만 작동하지 않았습니다.

find_document()를 인라인으로 유지하려고합니다. 여기에 누락 된 것이나 잘못 된 것이 있습니까?

+0

GCC 4.2 – MacGeek

+2

함수 선언에 대해 '정적'의 의미를 확인하십시오. 그런 다음 '정적'이라는 단어를 제거하십시오. –

+0

aa !!! 당신. 감사. – MacGeek

답변

6

여기에서 문제는 static과 같은 함수 선언입니다. 이는 동일한 컴파일 단위 (.c 파일) 내의 다른 함수에서는 사용할 수 있지만 파일 외부의 다른 함수에서는 사용할 수 없다고 말합니다. static을 제거하면 문제가 해결됩니다.

덧붙여서 두 번째 기능의 철자가 잘못되었습니다 - 이 아니라 document_found이어야합니다.

+0

yah! 오타를 유감스럽게 생각합니다. 고맙습니다. – MacGeek

관련 문제