2010-05-12 6 views
12

저는 3 개의 프로젝트로 구성된 솔루션을 가지고 있습니다. 하나는 정적 라이브러리이고, 두 개는이 라이브러리에 종속되고 연결되는 콘솔 기반 .exe 파일입니다. 그들의 설정은 동일하게 보입니다. 나는 그들 중 하나 구축 :왜 내 Visual C++ .exe 프로젝트 빌드 .lib 및 .exp 파일을 빌드합니까?

1> ------ 빌드 시작 : 프로젝트 : masksample, 구성 : 디버그는 Win32 ------
1> 컴파일 ...
1> stdafx 통화 당
1> 컴파일 ...
1> masksample.cpp
1> 자원에 대한 매니페스트 컴파일 ...
1> 연결 ...
1> LINK : C : \ 사용자 \ DarekSz \ PRACA \ cci \ Debug \ masksample.exe를 찾을 수 없거나 마지막 증분 링크에 의해 작성되지 않았습니다. 전체 링크
1> 매니페스트 ...
1> masksample 임베드 수행 - 0 오류 (들), 0 경고 (들)
========== 빌드 : 1, 0, 실패 1 성공

1> ------ 빌드 시작 : 최신, 0 내가 다른 건물로 이동 다음 ==========

를 생략 : 프로젝트 : calibsample, 구성 : Debug Win32 ------
1> 컴파일 중 ...
1> stdafx.cpp
컴파일 1> ...
1> calibsample.cpp
1> 자원에 대한 매니페스트 컴파일 ...
1> 연결 ...
1> LINK : C : \ 사용자 \ DarekSz \ PRACA \ CCI \ Debug \ calibsample.exe을 (를) 찾을 수 없거나 마지막 증분 링크에서 빌드하지 않았습니다. 전체 링크 수행
1> 라이브러리 C : \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib 및 개체 C : \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
1> 포함 매니페스트. ..
1 calibsample - 0 오류 (들), 0 경고
========== 빌드 : 1 개 성공, 0 개 실패, 1 개 최신, 0 개 건너 뛰기 == ========

이번에 .lib 및 .exp 파일을 만드는 이유는 무엇입니까? 이 기능을 켜고 끌 수있는 옵션이 있습니까?

답변

16

조금 늦었지 만 다른 누군가가이 힌트를 유용하게 사용할 수 있습니다.

가 BTW 나는 C의 ++ 전문가 아니에요 ... 내 솔루션에서

내가 3 개 프로젝트가있다. 하나는 dll 프로젝트이고 다른 하나는 dll 프로젝트를 참조하는 두 개의 Win32 응용 프로그램 프로젝트입니다.

일반적으로 dll을 빌드하면 NON dll 프로젝트에도 다른 파일 (.exp, .lib)이 생성됩니다. DLL 프로젝트의 .h 파일을 __declspec (dllexport)로 표시된 클래스가 포함 된 응용 프로그램 프로젝트에 포함하면이 문제가 발생할 수 있습니다.

링커가 일부를 포함 시키려고하는 것을 피하려면 다음을 수행하십시오.h 파일을 "내보내기"하려면 _declspec 매크로를 정의하는 조건식을 사용하십시오.

예 :

#if defined(_DO_NOT_EXPORT) 
#define DllExport 
#else 
#define DllExport __declspec(dllexport) 
#endif 

좋아, 이제 당신이 당신의 DLL 프로젝트에서에서 MyClass.h가 있다고 가정 해 보자. 당신의 .H 파일에

당신은 지금 할 수 :

class DllExport MyClass { 
... 
} 

를가 아닌 DLL 프로젝트에이 .H 파일을 포함 할 때, 당신은 _DO_NOT_EXPORT 조건

#define _DO_NOT_EXPORT 
#include "MyClass.h" 
+0

이 의견을 보내 주셔서 감사합니다. – neuviemeporte

+1

오, 그래, 내 프로젝트에서 이것을 잊어 버렸습니다 ... 대답 주셔서 감사합니다 –

+0

좋은! 그래서 도움이됩니다. – Yves

2

실행 파일에서 하나 이상의 함수를 내 보내면 정상입니다.

+0

을 정의 할 단순히해야 실행 파일에서 함수를 내보내는 것이 무슨 뜻입니까? – neuviemeporte

+0

DLL에서 함수를 내보내는 것처럼 실행 파일에서 함수를 내보낼 수도 있습니다. –

+1

실행 파일이 함수를 내보내는 방법을 볼 수 없습니다. 그것은 main()에 전체적으로 포함되어 있습니다. – neuviemeporte