[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:27219] Plamo でのクロスコンパイラ作成方法



FUNABARA です。

Plamo Linux 4.2 で Windows 用のクロスコンパイラを作成し、
そのコンパイラでプログラムがコンパイル・実行ができたので
ここにクロスコンパイラの作り方を書き残します。
なお、host,build,target の指定をきちんとしていませんが
ウチの環境では動いていますので突き詰めていません。


1. 必要なファイルをダウンロードします。
 クロスコンパイラの作成に必要なプログラムは

  bintuils
  gcc
  w32api
  mingw-runtime

です。いずれも MinGW のサイトで手に入ります。
また、gcc は 4.1.0 だとコンパイルに失敗したので、無難に MinGW から
ダウンロードした方がよいと思います。
ちなみに、僕は binutils のみ Ring Server Project からダウンロードし、
残りは MinGW のサイトからダウンロードしました。

今回クロスコンパイラに使用したファイルは
 binutils-2.16.tar.bz2
 gcc-core-3.4.5-20060117-1-src.tar.gz
 w32api-3.6-src.tar.gz
 mingw-runtime-3.9-src.tar.bz2

です。

2. binutils のコンパイル・インストール
ここからはクロスコンパイラを作るために延々とコンパイルします。
注意すべき点として、コンパイラのインストールディレクトリに、
自分の権限がいります。 root権限のディレクトリだとコンパイルに失敗しました。
今回僕は /opt/cross にインストールしました。
  
  % cd ~/
  % tar -xjvf binutils-2.16.tar.bz2
  % mkdir build
  % cd build
  % ../binutils-2.16/configure --prefix=/opt/cross \
                               --target=i386-mingw32 \
                               --with-gcc \
                               --with-gnu-as \
                               --with-gnu-ld
  % make
  % make install
  % cd ~/build; rm -rf *

3. ヘッダファイルのインストール
次に gcc をコンパイルするためのヘッダファイルを、
コンパイラのインストールディレクトリ以下にインストールします。

  % cd ~/
  % mkdir /opt/cross/i386-mingw32/include/
  % tar -xzvf w32api-3.6-src.tar.gz
  % tar -xjvf mingw-runtime-3.9-src.tar.gz
  % cp -r w32api-3.6/include/* /opt/cross/i386-mingw32/include/
  % cp -r mingw-runtime-3.9/include/* /opt/cross/i386-mingw32/include/


4. gcc のコンパイル・インストール
gcc のコンパイルです。
まず、先ほど作成・インストールした bintuils にパスを通します。

  % setenv PATH /opt/cross/bin:/opt/cross/i386-mingw32/bin:$PATH

そして、gcc をコンパイル・インストールします。
  % cd ~/
  % tar -xzvf gcc-core-3.4.5-20060117-1-src.tar.gz
  % cd build
  % ../gcc-3.4.5-20060117-1/configure --enable-languages=c \
                                      --prefix=/opt/cross/ \
                                      --target=i386-mingw32 \
                                      --enable-sjlj-exceptions \
                                      --disable-win32-registry \
                                      --with-headers=/opt/cross/i386-mingw32/include/
  % make
  % make install
  % cd ~/build; rm -rf *

5. w32api のコンパイル・インストール
w32api のコンパイルです。
先ほどインストールした gcc に念のためパスを通し直します。
(この作業はいらないかもしれません。)
  % setenv PATH $PATH

コンパイラの指定をします。先ほど作成した gcc を環境変数で指定します。
  % setenv C_INCLUDE_PATH "/opt/cross/i386-mingw32/include:/opt/cross/include"
  % setenv CPLUS_INCLUDE_PATH ${C_INCLUDE_PATH}
  % setenv LIBRARY_PATH /opt/cross/i386-mingw32/lib:/opt/cross/lib
  % setenv LD_LIBRARY_PATH /opt/cross/i386-mingw32/lib:/opt/cross/lib
  % setenv OBJDUMP /opt/cross/bin/i386-mingw32-objdump
  % setenv AS      i386-mingw32-as
  % setenv CC      i386-mingw32-gcc
  % setenv AR      i386-mingw32-ar
  % setenv RANLIB  i386-mingw32-ranlib
  % setenv LD      i386-mingw32-ld
  % setenv DLLTOOL i386-mingw32-dlltool
  % setenv WINDRES i386-mingw32-windres

続いて、w32api のコンパイルです。
  % tar -xzvf ../w32api-3.6-src.tar.gz
  % cd w32api-3.6/
  % ./configure --prefix=/opt/cross/i386-mingw32 --target=i386-mingw32
  % make
  % make install

6. mingw-runtime のコンパイル・インストール
mingw-runtime のコンパイルは w32api のコンパイルと変わりません。
環境変数もそのままで以下を実行します。

  % tar -xzvf ../mingw-runtime-3.9-src.tar.gz
  % ./configure --prefix=/opt/cross/i386-mingw32 --target=i386-mingw32
  % make
  % make install


7. デバックシンボルの削除
この作業はやらなくてよいと思いますが、ファイルサイズ縮小のために行っています。

  % cd /opt/cross/bin
  % strip --strip-debug *
  % cd /opt/cross/i386-mingw32/bin
  % strip --strip-debug *
  % cd /opt/cross/lib
  % strip --strip-debug *
  % cd /opt/cross/i386-mingw32/lib/
  % strip --strip-debug *

以上です。

クロスコンパイルするときは、 環境変数でコンパイラを指定します。
僕は以下のようなスクリプトを作成し、作業時に切替えています。

setenv PATH /opt/cross/bin:/opt/cross/i386-mingw32/bin:${PATH}
setenv C_INCLUDE_PATH "/opt/cross/i386-mingw32/include:/opt/cross/include"
setenv CPLUS_INCLUDE_PATH ${C_INCLUDE_PATH}
setenv LIBRARY_PATH /opt/cross/i386-mingw32/lib:/opt/cross/lib
setenv LD_LIBRARY_PATH /opt/cross/i386-mingw32/lib:/opt/cross/lib
setenv OBJDUMP /opt/cross/bin/i386-mingw32-objdump
setenv AS      i386-mingw32-as
setenv CC      i386-mingw32-gcc
setenv AR      i386-mingw32-ar
setenv RANLIB  i386-mingw32-ranlib
setenv LD      i386-mingw32-ld
setenv DLLTOOL i386-mingw32-dlltool
setenv WINDRES i386-mingw32-windres


これで pdcurses と rogue はコンパイルでき、 Windows 98 で動くことは確認しました。
2000 や XP はウチにないので未確認ですが、たぶん大丈夫だと思います。
Linux 上で Windows 用のクロスコンパイラを作る方法が意外に Web で収集できません
でしたので、これが役にたってくれる事を願います。


--
FUNABARA Masao

Follow-Ups
[plamo:27220] Re: Plamo でのクロスコンパイラ作成方法, KATOH Yasufumi

[検索ページ] [メール一覧]
Plamo ML 公開システム