2014-05-12 2 views
3

저는 많은 라이브러리 (어느 정도 서로 의존적 인)를 만드는 프로젝트 (크로스 플랫폼이지만이 경우 Windows 만 중요합니다)를 만들고 있습니다. 함수 또는 구조/클래스/열거 형/등을 선언하는 모든 헤더 파일. 별도의/include 폴더에 있지만 소스 파일은 모듈로 그룹화되어 있습니다.심볼을 내보낼 때 여러 라이브러리를 처리하는 방법은 무엇입니까?

나는 _declspec 가져 오기/내보내기에 대한 매크로를 만든하지만 내 질문은 이것이다 :

내가 각 라이브러리에 대한 수출 버전을 트리거 다른 처리기 지시문을해야 하는가? 라이브러리는 다른 라이브러리에 속한 헤더를 사용할 수 있기 때문에 심볼이 가져 오기로 간주되는 것이 중요합니까?

모의 프로젝트에서 테스트 한 내용을 모두 내보내기 기호로 사용할 수 있으며 여전히 작동하지만이 좋은 방법입니까?

감사합니다.

답변

0

라이브러리에서 내보내려는 클래스/함수에서 내보내기를 선언하는 매크로를 만들어야합니다. (모든 종속 헤더 포함)을 가져 오기로 선언해야합니다. 나는 매번 수출하는 것이 당신을 위해 일하는 방법을 따르지 않습니다. .H 파일에 정의 1 라이브러리

- 여기

은 예입니다. 그것은 첫째 라이브러리 헤더 파일과 프로젝트 파일에 정의되지 않은 __<your_module_name>_DLL__ 전처리를 가정하고 someName 클래스를 가져 경우 2 라이브러리에

#ifdef __<your_module_name>_DLL__ 
#define <your_module_name>_EXPORT __declspec(dllexport) 
#else 
#define <your_module_name>_EXPORT __declspec(dllimport) 
#endif 

class <your_module_name>_EXPORT someName 
{ 
    .... 
} 

: 프로젝트 파일에 처리기를 __your_module_name>_DLL__

라이브러리 1 헤더 파일을 정의 exported 대신 imported이됩니다.

이렇게하면 컴파일하는 동안 상호 종속성을 올바르게 사용할 수 있습니다.