Visual Studio 2010 을 사용중 /MP 스위치를 사용 할 수 있다는것을 깜박하고 있다가 진행 중인 프로젝트에 적용을 시켜 보았다.
프로젝트 옵션 -> C/C++ -> 일반 -> 다중 프로세서 컴파일에 예(/MP ) 옵션을 켜고 컴파일 시작.
Gm 스위치와 호환이 안되므로 MP 를 무시한다고 나옴..
프로젝트 옵션 -> C/C++ -> 코드 생성 -> 최소 다시 빌드 가능 항목의 /Gm 옵션을 아니오 (/Gm-) 로 바꿔준 다음
다시 컴파일을 진행...
error C2813: /MP를 지정하면 #import를 사용할 수 없습니다.
으엌.. ㅠㅠ
프로젝트에서 사용중인 ADO dll 을 import 해서 사용중인데 MP 스위치와 import 옵션을 동시에 사용 할 수 없다고 MSDN 에서도 명확하게 말하고 있음..
그래도 난 쓰고 싶은데.. 그래서 찾아 봄.
#import 구문을 통해 사용하는 dll 은 COM 으로 이루어진 dll 이기 때문에 tlh 같은 Type Library Header 가 분명 생성이 됨
다음과 같은 과정을 거치면 import 구문을 빼고 include 구문으로 변경해서 MP 스위치를 사용 할 수 있다.
1. tlh 파일 추출하기
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")
구문을 그대로 두고 컴파일을 진행 한다.
컴파일이 성공하면 Object 파일들이 생성 되는 Debug 폴더 또는 Release 폴더로 가보자.
#import 처리기가 하는 역할이 dll 에서 tlh 를 추출하여 헤더 파일에 그대로 붙여 넣는 작업을 해주는 역할이기 때문에 Debug 폴더나 Release 폴더에 가보면 다음과 같은 파일이 보일것이다.
msado15.tlh msado15.tli |
각각 용량은 167KB, 146KB 정도로 꽤 큰편이다.
위 두파일을 복사해서 #import 구문을 사용했던 소스와 동일한 경로에 붙여넣기 한다.
#import ".........
코드를 다음과 같이 변경한다.
#include "msado15.tlh"
이렇게 하면 #import 로 추출된 tlh 파일을 include 하는 구조이기 때문에 동일한 역할을 수행한다.
/MP 스위치를 켜고 빌드 -> 솔루션 다시 빌드 를 선택하여 컴파일을 진행해 보면 또 컴파일 실패가 된다.
msado15.tlh(5025): fatal error C1083: 포함 파일을 열 수 없습니다. "....\msado15.tli': No such file or directory"
하지만 컴파일 오류 내용을 잘 보면 포함 파일을 열 수 없습니다. 라고 나오는것을 알 수 있기 때문에 tlh 파일 안에서 msado15.tli 파일을 찾을 수 없다 라는 오류를 알 수 있다.
msado15.tlh 파일을 메모장등의 에디터로 열어보자.
편집 -> 찾기 메뉴를 이용하요 .tli 를 찾아 보면 거의 끝부분에서 다음 줄을 찾을 수 있다.
//
// Wrapper method implementations
//
#include ".......\debug\msado15.tli"
앞 경로는 개인정보 보호상 삭제..
Full Path 로 된 #include 문을 찾을 수 있는데 바로 이 부분의 경로가 Debug 폴더까지 들어가 있어서 파일을 찾을 수 없는것으로 나오는것이다.
경로를 #import 문이 있는 소스의 경로로 수정한 다음 다시 한번 컴파일 해보면
제대로 컴파일 되는것을 확인 할 수 있다.
진행중인 프로젝트의 소스는 약 9500 라인의 C++ 소스이며 /MP 적용을 하지 않고 컴파일 하면
1:21초 정도의 컴파일 진행시간이 소요 된다.
/MP 적용후에는 31초로 시간이 단축 되는것을 확인 할 수 있으며
즉, 다음과 같다.
/MP 적용 전 -> 1분 21초 /MP 적용 후 -> 31초 약 260% 컴파일 속도 증가 |
다음과 같이 CPU 도 Full 로 사용하는것을 볼 수 있다.
다들 /MP 옵션을 이용해서 컴파일 시간을 줄여 보아요~~!
'Programming > Tips' 카테고리의 다른 글
Tortoise SVN 을 탐색기 툴바에 넣어보자 (0) | 2013.08.09 |
---|---|
Softcamp 오류 날때 (0) | 2013.08.02 |
MS SQL 2008 R2 방화벽 해제 (0) | 2013.04.05 |
Bitnami Redmine SVN 연결 - Ubuntu VM (2) | 2012.11.06 |
RocketDock 항상 위로 세팅 해주는 Utility (2) | 2012.03.14 |
Windows 7 RocketDock 정상적으로 사용하기 (2) | 2012.03.07 |
ActiveX INF 파일 구조 (0) | 2012.02.17 |
VC++ 6.0 MFC ActiveX 권한 상승 사용하기 (1) | 2012.02.15 |