2015-01-28 4 views
0

OSX에서 makefile을 사용하는 커다란 C++ 프로젝트가 있습니다. 여기서 단순히 호출 할 수있는 내 보낸 함수를 추가하려고합니다. 프로젝트는 실행 가능해야하며 라이브러리가 아니어야합니다. 이미 많은 기능을 수출하고 있지만 내보내기 기능을 사용할 수 없기 때문에 바이너리에서 nm을 실행할 때 보이지 않습니다. OSX C++ 내보내기 기능

는 단순히 나는 또한

EXPORT int callme(int test) {return 0;} 

같은 헤더를 선언하지만 난 이미 기호의 오류의 무리를 얻을 시도 .H

#define EXPORT __attribute__((visibility("default"))) 
EXPORT int callme(int test); 

헤더에이를 추가하려고 다른 오브젝트 파일에 존재합니다.

편집 : 그것은 간단한 C 함수이고 나는 또한 C에 관해서 ++ 및 어떤 통찰력이나 도움이 많이 감사 감사하겠습니다 때 내가 초보자의 비트를 해요

#if !defined(__cplusplus) 
#define MONExternC extern 
#else 
#define MONExternC extern "C" 
#endif 

MONExternC int callme (int test); 

을 시도했다.

+1

내보내는 C 함수 또는 C++ 함수입니까? 당신은 그것을''extern "C"{...}'에 포장해야 할 수도 있습니다. (http://stackoverflow.com/questions/1041866/in-c-source-what-is-the-effect-of- extern-c) 블록. 올바르게 익스포트 될 수 있지만 C++ 함수 이름이 있습니다. – tadman

+0

이것은 간단한 C 함수로, 내가 시도한 내용의 포스트에 컨텍스트를 추가했습니다. –

답변

1

은 머리글에서 독립형 비 구성원 템플릿 이외의 비 인라인 함수 인으로 정의되어 있습니다. 이것은 당신이해서는 안되는 일입니다. 그것은 당신이 설명하는 종류의 오류로 이어지고 표준에 의해 금지되어 있습니다.

머리글에 함수 ptototype 만 있어야합니다. 정의를 정확히 하나의 소스 파일로 이동하십시오.

가시성 속성은 공유 라이브러리를 만들 때만 의미가 있습니다. 당신은 아마 그것을 필요로하지 않습니다.