[GpGiki 대문으로]

Porting To Dev Cpp


DevCpp는 Mingw라는 컴파일러 패키지를 사용하고, mingw는 gcc를 Win32 환경으로 이식한 것입니다. 따라서 DevCpp 이식 문제에 대한 정보를 찾을 때 Dev-c++, dev-cpp 등의 키워드로 검색해서 없으면 mingw를 찾아보고 그래도 없으면 gcc를 찾아보는 순으로 나아가야 합니다...

관련 링크, 참고자료

Mingw 용으로 이식, 빌드된 여러 공개 라이브러리들 - http://sourceforge.net/projects/mingwrep/ , http://sourceforge.net/projects/gnuwin32/

MSVC용 DLL을 사용하는 방법 - http://mywebpage.netscape.com/yongweiwu/dllfaq.htm

OpenGL 한글 출력 라이브러리 Glan의 이식 경험 - http://www.gpgstudy.com/forum/viewtopic.php?t=1098

DevCpp에서 미리 정의되어 있는 매크로들.

크로스-플랫폼 라이브러리를 빌드할 때 중요. (더 있을 것임)

__GNUC__ __MSVCRT__ __MINGW32__ _WIN32 WIN32

DevCpp IDE의 프로젝트 - 옵션 - 컴파일러 - 링커에서 디버깅 정보 생성을 Yes로 하면 __DEBUG__ 가 설정된다. VC와는 달리, No로 한다고 해서(즉 디버그 모드가 아니라고 해서) NDEBUG가 정의되지는 않는 것 같다(확인 필요).

DLL 이식 시 중요한 점

DevCpp에서는 _declspec이 아니라 __declspec 임(밑줄 하나 더).

DevCpp의 Mingw에서 주의할 점

DevCpp 4.9.8.0 패키지에 포함된 Mingw 는 따로 배포되는 정식 Mingw 2.0 패키지와 조금 다르다. 디렉토리 구성이나 bin에 들어 있는 것도 좀 다르고, 특히 gcc의 기본적인 헤더 디렉토리 설정이 다른 듯 하다. 표준 C, C++ 라이브러리들을 c++ 소스를 컴파일할 때, DevCpp의 gcc를 명령행으로 바로 사용할 때에는 반드시 -I 옵션으로 include, includec++, includec++/mingw 등을 지정해 줘야 한다.

DevCpp IDE 안에서만 빌드를 할 때에는 별 문제가 없지만, Lua, Boost 등 다른 범용 프로젝트들을 명령행에서 빌드할 때에는 문제가 생긴다. 해결책은:

  1. make 파일에서 CXXFLAGS 등 컴파일 옵션을 지정하는 매크로에 -I 옵션을 더 추가한다.
  2. Boost 처럼 make가 아닌 빌드 도구를 사용하는 경우에는 환경 변수를 설정해 주는 게 더 편하다. gcc가 헤더 디렉토리를 찾을 때 참조하는 환경 변수는 CPLUS_INCLUDE_PATH 이다.

예:

 DOS>set CPLUS_INCLUDE_PATH=e:devcppinclude;e:devcppincludec++;e:devcppincludec++mingw;


Direct3D의 빌보드 예제를 DevCpp 4.9.7.4로 컴파일하는 데 성공했습니다. 일단 DevCpp의 MSVC 프로젝트 가져오기로 프로젝트를 만들었습니다. 거기까지는 별 문제가 없었습니다.

그 후에 여러 난관들이 있었는데요. 우선 컴파일 단계....

COM을 사용하기 위해서는 컴파일러 옵션에 -fvtable-thunks가 있어야 하는데 MSVC 프로젝트 가져오기에서 자동적으로 설정해주지 않더군요. 그래서 프로젝트 옵션에서 직접 설정해서 해결.

__int64에서 컴파일 오류 : __int64를 long int로 바꿔서 해결했습니다.

for 문의 변수 범위 문제 : VC에서는 for 문의 초기화 목록에서 선언한 변수가 for 문 밖에서까지 살아남는데 표준에 위배되는 것이라 gcc에서는 오류가 납니다. 변수 선언을 for 문 밖으로 빼내서 해결. const와 임시 객체 - 임시 객체의 레퍼런스를 받는 매개변수로 받는 경우 const가 지정되어야 하는데 common 디렉토리의 소스 코드들 중 그렇지 않은 부분이 있었습니다. 해당 매개변수에 const를 추가해서 해결. 이제 링크 단계...

sqrtf 문제 - C++에서 sqrt는 템플릿 함수라서 구체적인 함수는 내부적으로 결정되는데 그걸 무시하고 sqrtf를 그냥 쓰더군요. DX의 include에서 sqrtf가 있는 .h와 .inl 파일들을 찾고 모두 sqrt로 수정해서 해결. -ld3dx8dt 를 찾지 못한다는 오류가 나오는데, DevCpp의 DX 링크 라이브러리들에는 d3dx8dt(libd3dx8dt.a) 가 없습니다. -ld3dx8d로 바꿔서 해결. 실행...

실행 파일이 만들어지긴 했으나 d3dx8d.dll을 찾지 못해서 바로 종료됨 - DX SDK 예제 디렉토리들 중 support에서 d3dx8d.dll를 찾아냈고 그걸 실행 파일이 있는 곳에 복사해서 해결. 이번엔 그래픽 파일들을 못 찾음.. 그래서 아예 실행 파일과 dll 파일을 media 디렉토리에 복사했음 - 실행 잘 됨 !

--류광


DevCpp 참고

분류 도구


제일 위로
최종 수정 일시: 04월 03일(2003년) 10:35 PM 편집 | 정보 | 차이 | 비슷한 페이지 DebugInfo
유용한 페이지들: 분류 분류 | 자유로운 연습장 SandBox | 무작위 페이지들 RandomPages | 인기있는 페이지들 MostPopular