jc01rho의 일상잡다

#pragma comment(lib," .lib") 본문

컴퓨터/C & C++

#pragma comment(lib," .lib")

jc01rho 2011. 5. 31. 20:16



#pragma는 중요한 Precompiler 지사자 중에 하나다.

 

Project -> Setting -> Link(단축키:ALT+F7)에서 "dxguid.lib"와 "ddraw.lib"와 같은 lib파일을 링크해야 하는 과정이 있다.

#pragma는 그런 라이브러리의 링크를 프로그램적으로 명시적으로 지정해줄 수 있다.


즉, #pragma comment(lib, "dxguid.lib")와 같이 해주면, ALT+F7을 눌러서 라이브러리를 링크시키는 것과 같은 효과가 발생합니다.

VC++의 경우에는 상당히 , IDE가 편리하게 짜여져 있으므로, Project Option이라는 것을 제공하여 편리하게 라이브러리를 링크 시킬 수 있지만, 볼란드 계열의 컴파일러만 해도 반드시 #pragma를 사용하여 라이브러리를 링크시켜주어야 합니다.

 

즉, VC++에서는 Project Option에서 포함을 시켜주어도 실행이 가능하지만,

다른 컴파일러에서는 컴파일이 불가능 할 수도 있다는 것이지요.

다른 컴파일러의 호환을 위해서라도 #pragma문을 이용해 라이브러리를 포함 시켜주는 것이 좋습니다. 여기서는 #pragma를 이용해서
라이브러리를 링크했으므로, 따로 Project -> Settings 에서 라이브러리를 포함시켜주지 않으셔도 됩니다.

 

물론, 꼭 다른 컴파일러와의 호환을 위해서 #pragma문을 사용하는 것은 아니구요. 나중에 디버깅을 할때도 한눈에 확 보이므로,
#pragma를 사용하는 것이 훨씬 더 프로젝트 관리에 유리합니다.

//-----------------------------------------------------------------

이번 영상처리 프로젝트에서

insert Project로 두개의 dll 프로젝트를 isnert하고, dll프로젝트를 수정하면 바로 컴파일하여, 내가 사용 하는 프로젝트에서 사용 할수 있게 사용 했다.

 

사용하는 프로젝트이름은 Face이고 KS_DIB와 EigenFace프로젝트를 insert하여 dll프로젝트를 수정을 하게끔 하였고, Output files 위치를 보면 ../../bin/Debug 위치에 이 프로젝트가 컴파일 되면, DLL 파일과 LIB파일이 만들어 진다.

 

#pragma comment(lib,"../bin/Debug/EigenFace.lib")   // 컴파일 되었을때 lib 위치를 잡아 준다.
#pragma comment(lib,"../bin/Debug/KS_DIB.lib")

추가 하였다. 이로써 라이브러리를 링크 시킴으로써 사용 할수 있고, 마지막으로 DLL를 해당 프로젝트에 복사 해주어야만 사용이 가능하다.

 

#include "../Face/KS_DIB/gfx_dc.h"

 

 

하면서 왜 프로젝트를insert를 해야만 할까 고민을 많이 했는데.. 모듈화 개념인것 같다. 이렇게 함으로써 다른 프로젝트에서도 사용 할수 있도록 모듈화된 코드를 작성하고, 바뀐 dll을 바로 사용하고, dll 소스를 봐야 할 때가 있으므로 insert Project로 한것 같다.

 

Comments