- 개인적으로 cygwin+mingw32+boost+SDL+directx+opengl+ACE기반에서 작업을 합니다.
그래서 여기에 요약을 해봅니다.
[�몄쭛]
링크 및 아티클 #
http://web.gccaz.edu/~medgar/puttycyg/ - putty를 cygwin 쉘로 사용하자! 빠르고 가볍고 좋다.
http://korea.gnu.org/manual/ - GNU Korea 메뉴얼 번역 프로젝트. 2권 번역 끝나면 참여해 볼 생각.
- ["cygwin/설치/한글설정"]
http://hermitte.free.fr/cygwin/#Win32 - cyg-wrapper.sh 이라는 스크립트를 소개하는 사이트. cygwin상에서 윈도우즈 어플리케이션을 실행하는 역할을 함. vim과 같이 쓰면 편리.
http://vim.sourceforge.net/tips/tip.php?tip_id=381 - cygwin에서 vim win32버전 돌리는 법.
[�몄쭛]
팁 #
- cygwin 기본 패키지 외의 다른 라이브러리들을 설치할 경우(예 : SDL), autoconf를 지원하는 소스배포본이면 ./configure를 다음과 같이 실행해야합니다.
./configure --prefix=/usr/local
이것은 라이브러리의 모든 결과화일이 /usr/local/include, /usr/local/lib로 들어가도록 해줍니다. (다른 ./configure들도 모두 --prefix=/usr/local를 붙여 실행하는 것이 좋습니다. 이것은 패키지 배포본은 /usr/include, /usr/lib에, 개인적으로 autoconf로 설치한것은 /usr/local 아래에 설치되게 됩니다.) - cygwin에서 directx를 사용할 수 있습니다. (SDL 설치시 directdraw wrapper를 사용하시려면 필수가 되겠죠) w32api 패키지를 설치하면 기본적으로 dx관련 라이브러리 화일들이 설치되지만, 아쉽게도 헤더화일은 배포본에 포함되어있지 않은 것을 알수 있습니다. (아마도 저작권 문제지 않을까...)
Directx SDK 8.0a를 다운 받습니다. (100메가가 조금 넘습니다.
) -> 여기에서 아래 헤더화일만 복사한 것 입니다.
w32api_dx8a_headers.zip (103.63 KB)
- 알집같은 것으로 열어서 include 디렉토리에서 ddraw.h, dinput.h, dsound.h d3dtypes.h를 /usr/include/w32api에 복사합니다. (/lib/w32api에 보면 d3d관련으로 추측되는 라이브러리들이 있습니다. 아마도 8.0까지 지원하는 것 같은데... 확실하지 않아서리...누가좀 알려주세요..
)
- 끝입니다. SDL과 같은 라이브러리를 컴파일 해봅니다. (./configure만 해봐도 directx header and library = yes 로 되는 것을 알 수 있습니다.)
[�몄쭛]
MinGW를 Cygwin과 사용하려면? #
cygwin으로 컴파일한 실행화일은 항상 cygwin1.dll을 필요로 합니다. 헌데, 이 dll을 포함한 어플리케이션은 상용으로 판매하려면 redhat사로부터 라이센스를 구입해야하므로 회사에서 쓰기에는 참 깝깝해지죠. 그래서 mingw 배포본에 포함된 gcc 및 binutil을 사용하여 컴파일하는 방법도 존재하지만, cygwin의 막강하고 깔끔한 bash 에뮬 개발환경이 부럽게 됩니다. 다음은 cygwin에서 mingw를 사용하여 "라이센스로부터 해방된" 실행화일을 만들기위한 설정들입니다.
[�몄쭛]
첫번째 방법 : 같이 깔기 #
cygwin 개발환경을 사용하려고 하고 cygwin 독립적인 실행화일을 생성하고자 하는데 있어서, "-mno-cygwin"보다 더 간단한 방법이 존재합니다. 단지 Cygwin과 Mingw 배포본을 각각 별도의 디렉토리(예를 들면 "C:\CYGWIN"과"C:\MINGW")에 설치한 후, 여러분의 PATH 환경변수에서 Mingw 설치 디렉토리의 /bin 디렉토리를 cygwin 설치 디렉토리의 /bin보다 앞에 오게 설정합니다. (예를 들면, "PATH=%PATH%;C:\MINGW\BIN;C:\CYGWIN\BIN"). 이것은 원하는 모든 UNIX 툴을 이용할 수 있으면서 gcc는 mingw 버전을 사용하는 것을 보장합니다. (어~ 알고 있는데~ 하시는 분은 그냥 넘어가시길... )
cygwin상의 "/etc/profile"화일안을 보면 시스템 수준의 경로가 "/usr/local/bin", "/usr/bin", "/bin" 순으로 지정되어있다는 것을 명심하시기 바랍니다. 따라서, 윈도우즈 경로를 설정한 것으로는 충분하지 않습니다... 즉, cygwin 환경내에서도 mingw /bin 경로가 앞에 설정되도록 수정해야합니다. ("/etc/profile"을 수정하거나 수동으로 설정하는지 선택하시기 바랍니다).
[�몄쭛]
두번째 방법 : gcc-mingw32 패키지 이용하기 #
앞의 방법은 몇몇 라이브러리에서는 충돌이 일어납니다. (순수 ANSI C 기반이라면 괜찮지만, win32용 개발이거나 directx관련 코드 컴파일시에는 문제가 생기더군요.) 그래서, redpixel은 다음과 같은 방법을 추천합니다. (한달전에 약 2일정도에 걸친 엄청난 삽질을 통해 알아냈지만 의외로 방법은 간단하더군요.)
우선 gcc-mingw32 패키지를 cygwin setup을 통하여 설치합니다. 그런다음 /usr/include/mingw와 /usr/lib/mingw 디렉토리가 생겼는지 확인합니다.
끝입니다. 이제부터는 모든 컴파일, 링크때마다 항상 gcc, g++ 뒤에 --target=i686-pc-mingw32 -mno-cygwin 옵션을 붙이면 mingw로 컴파일됩니다. 여기에 주의할 점은 반드시 gcc 다음에 이어서 적어야한다는 점이며, 가급적 패키지가 아닌 라이브러리들은 /usr/local 위에 설치해야한다는 점입니다. (autoconf기반의 프로젝트라면 ./configure --target=i686-pc-mingw32 라고 적으면 mingw기반의 makefile을 만들어 냅니다.) 이제 cygwin1.dll을 사용하지 않는다는 것을 알려면 다음과 같이 해봅니다.
objdump -p 컴파일된실행화일명 | grep "DLL Name"
그러면 다음과 비슷한 출력이 나옵니다.
DLL Name: msvcrt.dll DLL Name: msvcrt.dll DLL Name: KERNEL32.dll
여기에 cygwin1.dll이 껴있으면 mingw를 사용하지 않고 cygwin기반으로 컴파일되었다는 뜻입니다. 주의할 점은 이렇게 컴파일해서 실행하려면, 템플릿 기반인 boost같은 라이브러리를 제외하고는 모든 /usr/local 아래에 있는 사용자 라이브러리들을 재컴파일 해서 사용해야만 합니다. 즉, mingw32기반의 obj코드와 cygwin기반의 obj는 호환이 되질 않더군요.
[�몄쭛]
세번째 방법 : gcc-mingw 패키지 -> mingw32 전체 복사 #
앞서의 방법에 대한 보충입니다. 두번째 방법과 같이 gcc-mingw 패키지를 설치하고 mingw32 배포본도 적당한 디렉토리에 설치합니다. 그다음에는 다음과 같이 모든 mingw 라이브러리와 헤더화일을 복사합니다.
cp /cygdrive/c/mingw/include /usr/include/mingw cp /cygdrive/c/mingw/lib /usr/lib/mingw중간에 gl 디렉토리 관련해서 복사를 못한다고 나오면, /usr/include/mingw 디렉토리에 있는 gl디렉토리 하드링크를 삭제하고 복사하면 됩니다. 조금 귀찮긴 하지만 이렇게 하면 컴파일할때 -mno-cygwin 옵션만 붙이면 완벽히 cygwin 독립적인 코드가 생성됩니다. }}}
아참, 마지막으로 혹시나 자신의 라이브러리를 빌드할 생각이시라면 msys+mingw32를 설치하고 여기서 빌드한 후 /usr/local로 복사해 사용하는 방법도 좋습니다. msys 배포본에도 autotool은 지원하지 않지만 gmake는 지원하고 있고 위와 같이 cygwin을 설치하면 완전히 mingw와 호환되므로 좋더군요. _ SDL같은 경우는 cygwin에서 그냥 빌드해도 cygwin1.dll에 대한 의존성이 없도록 빌드하지만, 대부분의 오픈소스 라이브러리들(ACE조차도!)은 가급적 msys에서 빌드해서 사용하는 것이 좋습니다.
부디 제가 겪었던 삽질이 줄어들길 바랍니다.
'It's Code' 카테고리의 다른 글
FILE IO (0) | 2008.09.08 |
---|---|
리눅스 커널 소스 디렉토리 (0) | 2007.08.17 |
리눅스 커널 소스 (The Linux Kernel Sources) (0) | 2007.08.17 |
Java classpath 관리하기 (0) | 2007.08.16 |
JAVAScript TIP (0) | 2007.08.10 |