Anything personal, something useful

리눅스에서 윈도용 실행파일을 컴파일할 수 있는 크로스컴파일 환경 만들기

가끔씩 리눅스에서 작업한 후에 윈도 환경에서 같은 프로그램을 실행해야할 때가 있다. 이럴 때마다 윈도에 MinGW, MSYS, Cygwin 등의 환경을 설치해서 프로그램을 컴파일하는 것은 귀찮고 시간도 많이 걸리는 일이다. 그래서 내 컴퓨터에 크로스컴파일을 할 수 있는 개발환경을 구축하기로 결심했다. Mingw-w64를 직접 컴파일하기로 하고 소스코드를 내려 받아 configure를 했으나 해결할 수 없는 문제에 부딪쳤다. 그래서 나는 더 이상 시간을 낭비하지 않고 쉽게 포기해 버렸다.

더 검색을 해 본 결과 MXE라는 프로젝트를 알게 됐다. 이건 뭐 말로 할 수 없을 정도로 설치하기 쉬웠다.

# MXE의 소스코드를 내려 받는다.
git clone https://github.com/mxe/mxe.git
cd mxe

# 크로스컴파일할 타겟을 64비트 윈도로 지정한다.
echo MXE_TARGETS=x86_64-w64-mingw32.static > settings.mk

# GCC를 포함한 기본적인 컴파일 환경을 컴파일한다.
make cc

# PATH를 ~/.bash_profile 안에 설정한다.
echo 'export PATH="$PATH:$HOME/mxe/usr/bin"' >> ~/.bash_profile

# 현재 셸에서 크로스컴파일을 해야 한다면 PATH를 지정한다.
export PATH="$PATH:$HOME/mxe/usr/bin"

위와 같이 너무 쉽게 크로스컴파일 환경을 구축할 수 있었다. 아마도 내가 슬렉웨어를 설치할 때 모든 패키지를 다 설치해서 더 이상 필요한 스프트웨어가 없어서 그랬을지도 모르겠다. 슬랙웨어 몽땅 다 설치해 봤자 얼마 되지도 않지만 말이다.

테스트를 해보자.

cd /tmp
cat<<EOT > test.c
#include <stdio.h>
void main()
{
    printf("Hello World\n");
}
EOT

x86_64-w64-mingw32.static-gcc -o test.exe test.c

위와 같이 생성한 test.exe 파일을 윈도로 복사한 다음 CMD 창에서 실행하면 Hello World가 출력된다.

이 칸을 비워 두세요.

마지막 수정: 조희대 . 2018년 2월 11일 일요일 오후 7:42:25 EST
파싱시간: 0.023초
XHTML . CSS . 윤익희가 만듦!