Gentoo coLinux で MinGW クロスコンパイル >> MinGW クロスコンパイル環境と設定
MinGW ダウンロードページから次のファイルを取得してください。バージョンは最新のものでかまわないと思いますが、うまくいかないときはこのバージョンを試してください。
PE ファイル用の Binutils をコンパイルする必要があります。次のページからファイルを取得してください。
zip ファイルの解凍には unzip が必要です。 UnZip は解凍専用の PKZIP ツールです。
インストール先とクロスコンパイルに使用するファイルの置き場所を決め、ディレクトリを作成します。
ここでは /opt/xmingw32/ にインストールすることにします。 MinGW 環境に関するファイルはその下の src ディレクトリに置きます。
以降の説明では /opt/xmingw32/ を ${XMINGW} 、/opt/xmingw32/src を ${XMGWSRC} で示します。
MinGW ランタイムをインストールします。解凍するだけです ;-)
手順は参考文献「クロスビルド環境の構築」とほぼ同じです。 build ディレクトリを作るところが違います。
インストールします。
errinstall.log にエラーが記録されてなければインストールできているはずです。
実行してみます。次のように表示されれば成功です。
ソースは不要なので削除します。
プリフィクスが付かない dllwrap を要求する場合があるので、 ${XMINGW}/bin/mingw32-dllwrap を ${XMINGW}/mingw32/bin にコピーするかシンボリックリンクを作成します。
作成した Binutils にパスを通し、MinGW GCC パッケージを解凍、 configure 、make 、インストールします。
MinGW 環境用の Binutils を使うために、${XMINGW}/bin にパスを通します。
カレントディレクトリを ${XMGWSRC} に移し、 core, g++ を解凍します。 g77 が必要ならそれも解凍します。
カレントを移動します。
ビルド ディレクトリを作成しカレントを移動します。
いくつか configure オプションを指定し実行します。 g77 を含める場合は --enable-languages にカンマを挟んで g77 を追加してください。
make を実行します。
環境によってコンパイル時間は変わります。20分ほどで終わると思います。make.log にエラーが記録されてなければコンパイル成功です。
インストールします。
errinstall.log にエラーが記録されてなければインストールできているはずです。
実行してみます。
次のように表示されれば成功です。
以降、ソースは不要なので削除します。
mingw-utils には pexports や reimp といったツールが含まれています。 drmingw, redir, res2coff はクロス コンパイル環境で利用できませんが、他のツールは使えます。必須ではありません。
カレントディレクトリを ${XMGWSRC} に移し、 mingw-utils を解凍します。
カレントを移動します。
ビルド ディレクトリを作成しカレントを移動します。
いくつか configure オプションを指定し実行します。
make を実行します。
make.log にエラーが記録されてなければコンパイル成功です。
インストールします。
errinstall.log にエラーが記録されてなければインストールできているはずです。
mingw/bin/dsw2mak ファイルの行頭 #!gawk -f を #!/bin/gawk -f に変更します。
zip ファイルは gzip/gunzip で解凍できません。専用の unzip を使います。
ソースアーカイブを解凍し、カレントを移します。 LICENSE, INSTALL, README に目を通してください。
make を実行します。
test します。
最後に「##### testing complete.」と表示されていれば成功です。
インストールします。
errinstall.log にエラーが記録されていなければ成功です。
以降、ソースは不要なので削除します。
ホスト環境を汚染せずクロスコンパイルを行うために、作業はシェルスクリプトを介し実行します。またクロスコンパイルに伴う決まりきった設定を省略し、当面の問題に集中できるようにします。
cross.env のファイル名で ${XMINGW}/. に保存してください。
cross のファイル名で ${XMINGW}/. に保存してください。
cross のパーミッションを変更します。
実行してみます。
次のように表示されれば成功です。
cross-ppconfigure のファイル名で ${XMINGW}/. に保存してください。ソース ディレクトリ下に build ディレクトリを作成しコンパイルする場合の設定です。
パーミッションを変更します。
クロスコンパイルに際しビルド環境下で実行するファイルを生成する場合があります。このような作業を行うツールは configure で BUILD_FOR_CC や BUILD_FOR_CXX を取ります。ここではそれら変数に与えるシェルスクリプトを作成します。
build4cc.env のファイル名で ${XMINGW}/. に保存してください。
build4cc のファイル名で ${XMINGW}/bin/. に保存してください。
パーミッションを変更します。
build4cxx のファイル名で ${XMINGW}/bin/. に保存してください。
パーミッションを変更します。
2007/6/16sat mingw-utils のコンパイルに、 dsw2mak の修正を追記。
2007/3/17sat cross.env を改良。
2007/2/18sun mingw-utils のコンパイル方法を追記。
2007/2/9fri ページ統合。「 MinGW ランタイムのインストール」を修正。シェルスクリプトを修正。
2006/7/9sun BUILD_FOR_CC 関係の設定を記述した。
2006/3/9thu cross の echo 行を削除した。
2006/3/3fri 修正。
2006/3/2thu MinGW GCC 関連の不備の修正と追記。
2006/2/21tue cross に手を加えた。"$@" を使うようにした |_T)
2006/2/18sat cross に手を加えた。 CFLAGS="-O2 -DNDEBUG" のような引数を渡せるようになった。
2006/2/14tue dllwrap に関する記述を追記。
2006/2/13mon unzip、MinGW 環境の設定を記述。ソースの削除を追記。記述の整合性を調整。
2006/2/12sat MinGW GCC を記述。
2006/2/11sat ページ作成。
MinGW ダウンロードページから次のファイルを取得してください。バージョンは最新のものでかまわないと思いますが、うまくいかないときはこのバージョンを試してください。
MinGW - Minimalist GNU for Windows
http://sourceforge.net/project/showfiles.php?group... http://www.mingw.org/download.shtml
- mingw-runtime-3.9.tar.gz
- gcc-core-3.4.4-20050522-1-src.tar.gz
- gcc-g++-3.4.4-20050522-1-src.tar.gz
- w32api-3.6.tar.gz
- mingw-utils-0.3-src.tar.gz
PE ファイル用の Binutils をコンパイルする必要があります。次のページからファイルを取得してください。
Index of /gnu/binutils
http://ftp.gnu.org/gnu/binutils/
- binutils-2.16.tar.bz2
zip ファイルの解凍には unzip が必要です。 UnZip は解凍専用の PKZIP ツールです。
Info-ZIP's UnZip
http://www.info-zip.org/UnZip.html
- unzip552.tar.gz
インストール先とクロスコンパイルに使用するファイルの置き場所を決め、ディレクトリを作成します。
ここでは /opt/xmingw32/ にインストールすることにします。 MinGW 環境に関するファイルはその下の src ディレクトリに置きます。
mkdir /opt/xmingw32/ mkdir /opt/xmingw32/src
以降の説明では /opt/xmingw32/ を ${XMINGW} 、/opt/xmingw32/src を ${XMGWSRC} で示します。
MinGW ランタイムをインストールします。解凍するだけです ;-)
cd ${XMINGW}
mkdir mingw32
cd mingw32
tar -zxf ${XMGWSRC}/mingw-runtime-3.9.tar.gz
tar -zxf ${XMGWSRC}/w32api-3.6.tar.gz
手順は参考文献「クロスビルド環境の構築」とほぼ同じです。 build ディレクトリを作るところが違います。
cd ${XMGWSRC}
tar -jxf binutils-2.16.tar.bz2
cd binutils-2.16
mkdir build
cd build
../configure --prefix=${XMINGW} --target=mingw32 --disable-nls --disable-shared
make CFLAGS="-O2 -fno-exceptions" LDFLAGS=-s >make.log 2>&1
インストールします。
make install >install.log 2>errinstall.log
errinstall.log にエラーが記録されてなければインストールできているはずです。
実行してみます。次のように表示されれば成功です。
localhost build # ${XMINGW}/bin/mingw32-strings --help Usage: /opt/xmingw32/bin/mingw32-strings [option(s)] [file(s)] Display printable strings in [file(s)] (stdin by default) The options are: -a - --all Scan the entire file, not just the data section -f --print-file-name Print the name of the file before each string -n --bytes=[number] Locate & print any NUL-terminated sequence of at -<number> least [number] characters (default 4). -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16 -o An alias for --radix=o -T --target=<BFDNAME> Specify the binary file format -e --encoding={s,S,b,l,B,L} Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit -h --help Display this information -v --version Print the program's version number /opt/cross-tools/mingw32/bin/mingw32-strings: supported targets: pe-i386 pei-i38 6 elf32-i386 elf32-little elf32-big srec symbolsrec tekhex binary ihex Report bugs to <URL:http://www.sourceware.org/bugzilla/>
ソースは不要なので削除します。
cd ../..
rm binutils-2.16 -r
プリフィクスが付かない dllwrap を要求する場合があるので、 ${XMINGW}/bin/mingw32-dllwrap を ${XMINGW}/mingw32/bin にコピーするかシンボリックリンクを作成します。
# コピーする場合。
cp ${XMINGW}/bin/mingw32-dllwrap ${XMINGW}/mingw32/bin/.
# シンボリックリンクを作成する場合。
ln -s ${XMINGW}/bin/mingw32-dllwrap ${XMINGW}/mingw32/bin/.
作成した Binutils にパスを通し、MinGW GCC パッケージを解凍、 configure 、make 、インストールします。
MinGW 環境用の Binutils を使うために、${XMINGW}/bin にパスを通します。
PATH=${XMINGW}/bin:$PATH
カレントディレクトリを ${XMGWSRC} に移し、 core, g++ を解凍します。 g77 が必要ならそれも解凍します。
cd ${XMGWSRC}
tar -zxf gcc-core-3.4.5-20051220-1-src.tar.gz
tar -zxf gcc-g++-3.4.5-20051220-1-src.tar.gz
カレントを移動します。
cd gcc-3.4.5-20051220-1
ビルド ディレクトリを作成しカレントを移動します。
mkdir build
cd build
いくつか configure オプションを指定し実行します。 g77 を含める場合は --enable-languages にカンマを挟んで g77 を追加してください。
../configure --prefix=${XMINGW} --target=mingw32 --host=${MACHTYPE} --enable-threads --disable-nls --disable-win32-registry --disable-shared --enable-languages=c,c++ --enable-sjlj-exceptions --enable-libstdcxx-debug
- --disable-win32-registry は不要です。たぶん。
make を実行します。
make CFLAGS="-O2 -fomit-frame-pointer" LDFLAGS=-s >make.log 2>&1
環境によってコンパイル時間は変わります。20分ほどで終わると思います。make.log にエラーが記録されてなければコンパイル成功です。
インストールします。
make install >install.log 2>errinstall.log
errinstall.log にエラーが記録されてなければインストールできているはずです。
実行してみます。
mingw32-gcc --version
次のように表示されれば成功です。
gcc (GCC) 3.4.5 (mingw special) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
以降、ソースは不要なので削除します。
cd ../..
rm gcc-3.4.5-20051220-1 -r
mingw-utils には pexports や reimp といったツールが含まれています。 drmingw, redir, res2coff はクロス コンパイル環境で利用できませんが、他のツールは使えます。必須ではありません。
カレントディレクトリを ${XMGWSRC} に移し、 mingw-utils を解凍します。
cd ${XMGWSRC}
tar -zxf mingw-utils-0.3-src.tar.gz
カレントを移動します。
cd mingw-utils-0.3
ビルド ディレクトリを作成しカレントを移動します。
mkdir build
cd build
いくつか configure オプションを指定し実行します。
../configure --prefix=${XMINGW}/mingw32 --target=mingw32 --host=${MACHTYPE} CFLAGS="-O2 -march=pentiumpro" LDFLAGS="-s"
make を実行します。
make >make.log 2>&1
make.log にエラーが記録されてなければコンパイル成功です。
インストールします。
make install >install.log 2>errinstall.log
errinstall.log にエラーが記録されてなければインストールできているはずです。
mingw/bin/dsw2mak ファイルの行頭 #!gawk -f を #!/bin/gawk -f に変更します。
zip ファイルは gzip/gunzip で解凍できません。専用の unzip を使います。
ソースアーカイブを解凍し、カレントを移します。 LICENSE, INSTALL, README に目を通してください。
tar -zxf unzip552.tar.gz
cd unzip-5.52
make を実行します。
make -f unix/Makefile generic
test します。
make -f unix/Makefile test
最後に「##### testing complete.」と表示されていれば成功です。
インストールします。
make -f unix/Makefile install >install.log 2>errinstall.log
errinstall.log にエラーが記録されていなければ成功です。
以降、ソースは不要なので削除します。
cd ..
rm unzip-5.52 -r
ホスト環境を汚染せずクロスコンパイルを行うために、作業はシェルスクリプトを介し実行します。またクロスコンパイルに伴う決まりきった設定を省略し、当面の問題に集中できるようにします。
cross.env のファイル名で ${XMINGW}/. に保存してください。
# cross.env #PREFIX=/opt/xmingw32 TARGET=mingw32 PATH="${PREFIX}/local/bin:${PREFIX}/${TARGET}/bin:${PREFIX}/bin:${PATH}" export CC="mingw32-gcc " export CXX="mingw32-g++ " export C_INCLUDE_PATH="${PREFIX}/local/include:${PREFIX}/${TARGET}/include:${PREFIX}/include" export CPLUS_INCLUDE_PATH=${C_INCLUDE_PATH} #export LIBRARY_PATH="${PREFIX}/local/lib:${PREFIX}/${TARGET}/lib:${PREFIX}/lib" export LD_LIBRARY_PATH="${PREFIX}/local/lib:${PREFIX}/${TARGET}/lib:${PREFIX}/lib:${LD_LIBRARY_PATH}" export OBJDUMP="${PREFIX}/bin/mingw32-objdump " export PKG_CONFIG_PATH="${EXTRA_PKG_CONFIG_PATH}:${PREFIX}/local/lib/pkgconfig:${PREFIX}/${TARGET}/lib/pkgconfig" #export BUILD_FOR_CC="build4cc " #export BUILD_FOR_CXX="build4cxx " export MANPATH=${PREFIX}/man:${XLOCAL}/man:${MANPATH} export INFOPATH=${PREFIX}/info:${XLOCAL}/info:${INFOPATH} config_commands=" cppunit-config aalib-config fftw-wisdom-to-conf freetype-config gimptool-2.0 libart2-config libpng-config libwmf-config ${TARGET}-croco-0.6-config ${TARGET}-sdl-config xml2-config " for c in $config_commands do v=`echo $c | sed 's/-[0-9]\+\.[0-9]\+//'` v=`echo $v | sed "s/^${TARGET}-//"` v=`echo $v | tr '[:lower:]-' '[:upper:]_'` vv=$(eval echo `echo \\$$v`) if test -z $vv then for p in $PREFIX/local/bin $PREFIX/$TARGET/bin $PREFIX/bin do if test -f "$p/$c" then export $v="$p/$c" break fi done fi done
cross のファイル名で ${XMINGW}/. に保存してください。
#!/bin/sh prog=$1 shift PREFIX=/opt/xmingw32 . ${PREFIX}/cross.env ${prog} "$@"
cross のパーミッションを変更します。
chmod 755 ${XMINGW}/cross
実行してみます。
${XMINGW}/cross gcc --version
次のように表示されれば成功です。
args: gcc --version gcc (GCC) 3.4.5 (mingw special) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
cross-ppconfigure のファイル名で ${XMINGW}/. に保存してください。ソース ディレクトリ下に build ディレクトリを作成しコンパイルする場合の設定です。
#!/bin/sh CONFIG_SHELL=/bin/sh export CONFIG_SHELL PREFIX=/opt/xmingw32 . ${PREFIX}/cross.env echo -n "args: " echo "$@" cache=cross-config.cache sh ../configure --cache-file="$cache" \ --target=${TARGET} --host=${TARGET} --build=${MACHTYPE} \ "$@" status=$? rm -f "$cache" exit $status
パーミッションを変更します。
chmod 755 ${XMINGW}/cross-ppconfigure
クロスコンパイルに際しビルド環境下で実行するファイルを生成する場合があります。このような作業を行うツールは configure で BUILD_FOR_CC や BUILD_FOR_CXX を取ります。ここではそれら変数に与えるシェルスクリプトを作成します。
build4cc.env のファイル名で ${XMINGW}/. に保存してください。
BUILD_PREFIX=/usr export CC="${BUILD_PREFIX}/bin/gcc " export CXX="${BUILD_PREFIX}/bin/g++ " export C_INCLUDE_PATH="${BUILD_PREFIX}/local/include:${BUILD_PREFIX}/include" export CPLUS_INCLUDE_PATH=${C_INCLUDE_PATH} export PKG_CONFIG_PATH="${BUILD_PREFIX}/local/lib/pkgconfig:${BUILD_PREFIX}/lib/pkgconfig" export LD_LIBRARY_PATH="${BUILD_PREFIX}/local/lib:${BUILD_PREFIX}/lib:${LD_LIBRARY_PATH}" #export LIBRARY_PATH="${BUILD_PREFIX}/local/lib:${BUILD_PREFIX}/lib" export OBJDUMP=${BUILD_PREFIX}/bin/objdump
build4cc のファイル名で ${XMINGW}/bin/. に保存してください。
PREFIX=/opt/xmingw32 . ${PREFIX}/bin/build4cc.env ${CC} "$@"
パーミッションを変更します。
chmod 755 ${XMINGW}/bin/build4cc
build4cxx のファイル名で ${XMINGW}/bin/. に保存してください。
PREFIX=/opt/xmingw32 . ${PREFIX}/bin/build4cc.env ${CXX} "$@"
パーミッションを変更します。
chmod 755 ${XMINGW}/bin/build4cxx
- MinGW - Home
http://www.mingw.org/ - 総本山。
- GNU Binutil
http://sources.redhat.com/binutils/ - 総本山です。メーリング リストやドキュメントがあります。
- Info-ZIP Home Page
http://www.info-zip.org/ - PKZIP の圧縮解凍ツールです。 zip ファイルの操作に使います。
- win2linuxwiki - Info/Linux上でのMS-Windows向けGTKアプリのビルド
http://win2linux.sourceforge.jp/pukiwiki/index.php... - Building GTK apps for MS Windows on Linuxの日本語訳です。 GTK アプリをクロスコンパイルする方法が書かれています。 binutils と MinGW GCC のコンパイル&インストール、 GTK アプリのビルド方法など。
- win2linuxwiki - Info/クロスビルド環境の構築
http://win2linux.sourceforge.jp/pukiwiki/index.php... - 上記訳者の実践による記事。 binutils と MinGW GCC のコンパイル&インストール、 Gtk+2 パッケージのインストール。
- Cross-compiled win32 build environment under Linux
http://www.libsdl.org/extras/win32/gcc.html - libsdl をクロスコンパイルするためのシェルスクリプト。
2007/6/16sat mingw-utils のコンパイルに、 dsw2mak の修正を追記。
2007/3/17sat cross.env を改良。
2007/2/18sun mingw-utils のコンパイル方法を追記。
2007/2/9fri ページ統合。「 MinGW ランタイムのインストール」を修正。シェルスクリプトを修正。
2006/7/9sun BUILD_FOR_CC 関係の設定を記述した。
2006/3/9thu cross の echo 行を削除した。
2006/3/3fri 修正。
2006/3/2thu MinGW GCC 関連の不備の修正と追記。
2006/2/21tue cross に手を加えた。"$@" を使うようにした |_T)
2006/2/18sat cross に手を加えた。 CFLAGS="-O2 -DNDEBUG" のような引数を渡せるようになった。
2006/2/14tue dllwrap に関する記述を追記。
2006/2/13mon unzip、MinGW 環境の設定を記述。ソースの削除を追記。記述の整合性を調整。
2006/2/12sat MinGW GCC を記述。
2006/2/11sat ページ作成。
タグ
コメントをかく