jc01rho의 일상잡다
#pragma comment(lib," .lib") 본문
#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로 한것 같다.
'컴퓨터 > C & C++' 카테고리의 다른 글
STL Iterator erase시 "vector iterators incompatible" (0) | 2011.07.19 |
---|---|
LINK : warning LNK4098 : defaultlib "~~.lib" conflicts with use of other libs; use /NODEFAULTLIB:library (0) | 2011.05.31 |
CPP에서 MD5 암호화 하기 (0) | 2011.05.24 |
[ Error LNK2019 ] Link Error 발생시 확인해볼 것들 (0) | 2011.05.23 |
oauth+openssl+curl 삼종 세트 VC에서 빌드(build)하기 (재배포팩 필요없이) (1) | 2011.05.14 |