티스토리 뷰

다음 주는 휴가! 그래서 휴가기간동안 뭘해야 보람찰까 고민해봤지만... 내가 뭐 딱히 할 일이 있을리 만무하다.

그래서 생각한 것이 LiteAmp의 win32포트를 만들어 보는 거였는데... 어차피 일주일만에 할 수 있는 일은 아니겠지만...

일단 삽질 시작!

오늘의 목표는 ?CygWin이나 MinGW없이 MSVC로 GTK HelloWorld 만들기!

일단 MSVC로 빌드된 GTK를 찾는 것은 어렵지 않았다. 윈도용 GIMP를 패키징하던 ?tml의 홈페이지다. 등잔 밑이 어둡다더니...


그런데, 이건 뭔가 다운 받을것도 많고 전혀 윈도스럽지 않은 삽질이 필요한것 같아 보인다... 그래서 구글님께 gtk+ visual c++를 찾아달라고 부탁드렸더니:


흠 뭔가 멋진듯 한데... ?tml과 별차이가 없다. 게다가 VC 7.0이다(난 6.0). 같은 페이지에 있는 ?GladeWin32 사이트 링크가 보인다:


?GladeWin32가 있는 것은 알고 있었지만... 헛! 정말 등잔 밑이 어두웠다. 여기에 [http]GTK+ Win32 All-In-One Installer가 있을 줄이야!

바로 받아서 설치하니 기존에 GIMP때문에 깔려있던 GTK에 덮어서 깔아버린다. 그래서 혹시나 하고 두개의 GTK 런타임을 다 언인스톨하고 All-In-One만 다시 깔았다. 그리고 혹시나 하는 마음에GIMP를 실행시키니 잘 돌아간다!

그렇다! 바로 내가 원하는 환경이다! GTK 런타임만 있으면 모든 GTK 어플리케이션들이 다 그 런타임을 쓰는 것이다! Linux처럼! 자바처럼! 파이썬처럼! 모노처럼!

바로 MSVC를 띄우고 gtkhello 프로젝트를 만들었다. 아무 생각없이 Win32 Application 프로젝트로... 링크 에러가 몇 개 난다. 이 정도 쯤이야! 바로 gtk-win32-2.0.lib과 gobject-2.0.lib을 추가시켜 주었다. 흠.. 링크 에러가 또 난다. ?WinMain을 찾을 수 없단다.... 그렇다... ?WinMain인것이다. ㅂㅌ MSVC의 엔트리포인트...

씨익~ 비웃어 준다음 프로젝트를 새로 만들었다. :-D (아직도 VC를 기억하고 있는 스스로를 자랑스러워하면서) gtkhello2... 이번엔 Win32 Console Application 프로젝트로... 링크 OK! 실행도 잘된다! 한 방에!! 오오! 그런데 터미널 창은 뭐야?

뭔가 난관인듯하다... 다시 gtkhello프로젝트를 열었다. 그리고 main의 이름을 ?WinMain으로 그대로 바꿔주었다. 역시 링크 에러... __stdcall 이어야 한다는군... 기억이 난다... WINAPI다. 그리고 보니 함수 인자가 완전히 다르다. 이를 어쩐다. ?mithrandir님의 조언으로 엔트리포인트를 main으로 바꿔주었다.

gmem.c: 140: failed to allocate 4294...

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/gtkhello.exe : fatal error LNK1120: 1 unresolved externals

어벙벙한 에러를 뿜어낸다. :'( (VC를 쓴지 너무 오래된 탓이거니... 스스로를 위로하면서...) 작전상 후퇴... 다시 구글님께 gtk win32 main ?WinMain을 찾아달라고 졸랐다.


구글님 만세! WINAPI가 없다는 둥 __argc가 머냐는 둥 툴툴거리는 MSVC에게 #include <windows.h> 한 방을 먹여 주었다. 오케이! 바로 이거야 내가 원하는 건...

#ifdef _WIN32
#include <windows.h>
int WINAPI WinMain(int hInstance, int hPrevInstance, int lpCmdLine, int nCmdShow)
{
        return(main(__argc, __argv));
}
#endif

그러다가 앞의 메일 끝자락에서 본 mainCRTStartup이 뭔지 떠올랐다! 바로, 걸레같은 ?WinMain 따위를 날려 버리고! 엔트리포인트를 mainCRTStartup으로 바꿔 주었다.

오늘의 삽질 대성공!

이긴 한데... 너무 일찍 끝나버렸다... 새벽까지 해야 하는건데... 일단 블로그 쓰면서 시간을 좀 때우고... 그래도 시간이 남으면... 뭔가 볼만한 영화를 또 하나 찾아야 겠군...

댓글
댓글쓰기 폼