Compiling MinGW-w64 dengan Multilib di Linux
Oke, ini cerita panjang tentang gimana caranya bikin sendiri
MinGW-w64 di Linux yang bisa jalanin -m32 dan -m64
(alias support multilib). Jadi kamu bisa compile binary Windows 32-bit
maupun 64-bit langsung dari Linux.
Peringatan Dulu Nih
Kalau kamu lagi ada kerjaan mepet deadline atau butuh cepat, mending jangan coba compile cross compiler manual. Prosesnya bisa makan waktu berhari-hari dan bikin kepala pusing. Jadi ini cuma cocok buat kamu yang pengen eksperimen, belajar, atau emang butuh versi terbaru banget dari semua toolchain.
Yang Dibutuhin
- MinGW-w64 (ambil dari SVN)
- binutils 2.20.1
- gcc 4.5.0
- gmp 4.3.2
- mpfr 3.0.0
- mpc 0.8.2
Siapin disk space sekitar 2-3 GB (lebih enak kalau pakai SSD). Trus, usahakan compile di mesin dengan CPU kenceng & multicore, biar nggak terlalu lama.
Setup Awal
Setelah semua source di-download, extract ke satu working directory. Lalu pindahin library supaya dikenali gcc:
mv mpfr-3.0.0/ gcc-4.5.0/mpfr
mv gmp-4.3.2/ gcc-4.5.0/gmp
mv mpc-0.8.2/ gcc-4.5.0/mpc
Ingat, jangan compile langsung dari dalam folder source. Selalu bikin folder build sendiri.
Build Binutils
mkdir binutils-build; cd binutils-build
../binutils-2.20.1/configure --disable-nls \
--target=x86_64-w64-mingw32 \
--enable-targets=x86_64-w64-mingw32,i686-w64-mingw32
make -j4
make install
Hasilnya: tools dasar MinGW-w64 masuk ke /usr/local/bin.
Install Header MinGW
cd ..; mkdir mingw-build; cd mingw-build
../mingw-w64/trunk/mingw-w64-headers/configure --host=x86_64-w64-mingw32
make install
Ini bakal ngopi headers ke /usr/local/x86_64-w64-mingw32/include/.
Directory & Symlink
ln -s /usr/local/x86_64-w64-mingw32 /usr/local/mingw
mkdir -p /usr/local/x86_64-w64-mingw32/lib32
ln -s /usr/local/x86_64-w64-mingw32/lib /usr/local/x86_64-w64-mingw32/lib64
Ini penting buat multilib supaya nggak bingung antara lib32 dan lib64.
Build GCC (Pass 1)
cd ..; mkdir gcc-build; cd gcc-build
../gcc-4.5.0/configure --disable-nls \
--target=x86_64-w64-mingw32 \
--enable-languages=c,c++ \
--with-system-zlib \
--enable-multilib \
--enable-shared \
--enable-fully-dynamic-string
make all-gcc -j4
make install-gcc
Kalau ada error soal gmp-impl.h atau longlong.h nggak ketemu,
copy manual dari folder gcc/gmp/.
Build CRT
cd ../mingw-build
../mingw-w64/trunk/configure --disable-nls --host=x86_64-w64-mingw32 --enable-lib32
make -j4
make install -j4
Build GCC (Pass 2)
Nah, di sini biasanya mulai banyak drama: error skipping incompatible lib,
No rule to make target, sampai Link tests are not allowed.
Biasanya bisa diakalin dengan:
- Edit Makefile biar path lib → lib32 sesuai arsitektur
- Kopi
libtoolantar folder - Bikin symlink manual kalau ada header yang "hilang"
Intinya, coba terus sampai berhasil. Kadang butuh rerun make berkali-kali.
Hasil Akhir
Kalau semua lancar (dan sabar kamu cukup tebal), akhirnya kamu bakal punya MinGW-w64 cross compiler full multilib yang bisa compile binary Windows 32-bit & 64-bit, plus support static maupun DLL.
Contoh compile 32-bit:
./configure --host=x86_64-w64-mingw32
export CFLAGS=-m32
Done! Sekarang kamu bisa cross compile Windows binary langsung dari Linux. Berat di awal, tapi puas banget kalau berhasil.
Label: cross-compiler, linux, MinGW-w64, multilib
<< Beranda