본문 바로가기

Developement

minGW x86-64bit, DLL 빌드시 libc++ 문제 해결.

현재, 일반적으로 사용할 수 있는 컴파일러 중 64bit Win32.PE 를 생성 할 수 있는 것은 minGW 말고는 없는 걸로 알고 있습니다. 상용 컴파일러 로는 뭐가 있는지 알수 없기 때문이기도 합니다만 -_-;;
intel 같은데서 나오는 컴파일러는 64bit 를 지원 하겠죠.
하지만 범용적으로 쓰기엔 어려움이 있으므로, 저는 gcc 의 windows 판인 minGW 를 사용합니다.
릴리즈 버젼 4.5.5 를 현재 사용하고 있으며, OpenSource 로서 SourceForge 에서 개인 릴리즈 버젼으로 다운로드 받을 수 있습니다.

언제나 그렇듯 ... minGW 는 상용 컴파일러가 아니므로, 해당 컴파일러로 만들어진 바이너리가 오동작 해도 그에 대한 warranty 는 전혀 없습니다!

현재 64bit 를 지원하는 DLL 을 만드려면, VisualStudio 말고는 제가 아는 방법이 없습니다.
실제 구동 어플 역시 ResEditor 등으로 Dialog 를 만들고, 모두 100% Windows API 로만 만들고 있긴 합니다만 ..
DLL 역시 동일하게 만들어야 하는데, 일반적으로 32bit 로 빌드한 DLL 과 64bit 에서 빌드한 DLL 이 서로 다르게 나오는 경우가 있습니다.
특정 DLL 을 64bit 로 만들었는데 실제 LoadLibrary() 를 호출해서 쓰려면 다음 파일을 필요로 하는 경우가 있습니다.
libgcc_s_sjlj-1.dll
"데체 이게 뭔가요~?" 라고 물으신다면 바로 gcc 용 std c++ 라이브러리 입니다.
이게 필요한 옵셔은 컴파일시와 링크시 다음 옵션이 기본으로 걸리기 때문 입니다.
-shared-libgcc
이 옵션은 선언되지 않아도 기본으로 정의 되기 때문에 dll 을 만들면 추가적으로 해당 dll 에 dependency 가 걸리게 되어, dll 을 배포할 경우 해당 dll 도 함께 제공해야 하는 귀찮음이 발생 합니다!!!!
그럼 어떻게 할까요?
gcc 에서 안되는게 어디 있나요.
그냥 빌드 옵션에 다음과 같이 -static-libgcc 옵션을 붙입니다.

코드 블럭스 에서 옵션 달기 예제

컴파일과 링크시 모두 넣어 줍니다.
간단하죠?
누구 말대로 "참~쉽죠잉~~?" 입니다.
CodeBlocks 와 같은 자비로운 IDE 를 사용하신다면, 코드 설계만 잘 하셨다면 바로 Release 하나 복사해서 Release64 로 만들어 몇가지 옵션조절만 한다면, 어렵지 않게 64bit 이미지를 생성 할 수 있습니다.

어떤 컴퓨터를 쓰던간에 gcc 부터 설치하는 버릇을 달아 언제 어디서든지 컴파일 라이프를 즐기는 분들이 저처럼 있으시다면, 바로 64bit 이미지 생성에 어려움 격지 않게 도전 해 보시기 바랍니다.