Lazarusをアップデートしたので、再びまとめてみた。
ここでやること
Windows上のFreePascalでWindows i386/x86-64, Linux i386/x86-64向けのバイナリをコンパイルできるようにします。コンパイル作業はWindows i386上で行うこととし、他のプラットフォームはクロスコンパイルすることでバイナリを生成できるようにします。
LazarusのLCL(Lazarus Component Library)のクロスコンパイル環境の設定は含まれません。
環境
- Windows Vista Business
- Lazarus 0.9.30.4
- FPC 2.6.0
過去の戦歴
Lazarusをインストール
FreePascalコンパイラだけでもプログラム開発はできるけど、IDEがあったほうが便利なのでLazarusをインストールしましょう。
64bit環境でもLazarusはi386をインストールする方が賢明だと思われます。
Cygwinをインストール
ぐぐってね
Windows i386
Lazarusをインストールした時点で環境は構築できているはずですね。
Windows x86_64
(※ コンパイルはできたけど、やり方が正しいか謎)
- Cygwinのシェルを立ち上げて、コンパイルで使うディレクトリへ移動
mkdir -p /usr/local/src/
cd /usr/local/src/
- binutilsのソースを拝借してきて、展開、移動 (最新版は適宜チェック)。ちなみに、Cygwinのインストーラーでbinutilsのソースを入れてコンパイルしてみると失敗した
wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.gz
tar xvzf binutils-2.22.tar.gz
cd binutils-2.22
- x86_64-w64-mingw32をターゲットにしてconfigure
./configure --target=x86_64-w64-mingw32
- お決まりのコマンドを実行 (エラーになる場合、何らかのパッケージが不足していると思うので、Cygwinで追加する)
make clean
make all
make install
- コンパイルできれば「[Cygwin Dir]\usr\local\bin」に必要なファイルがコピーされる。
- 「x86_64-w64-mingw32-ar.exe」「x86_64-w64-mingw32-as.exe」「x86_64-w64-mingw32-ld.exe」「x86_64-w64-mingw32-objdump.exe」「x86_64-w64-mingw32-strip.exe」の5つのファイルを「[Lazarus Dir]\fpc\[FPC Ver]\bin\i386-win32」へコピー
- コピーしたファイルをそれぞれ「x86_64-win64-ar.exe」「x86_64-win64-as.exe」「x86_64-win64-ld.exe」「x86_64-win64-objdump.exe」「x86_64-win64-strip.exe」へリネーム
- FPCのサイトからLazarusに付属しているFPCと同じバージョンのソースコードをダウンロード
- ダウンロードしたファイルを展開
- コマンドプロンプトを管理者権限で起動し、展開したフォルダに入る
- クロスコンパイル用のファイルをコンパイル・インストール
make clean
make all OS_TARGET=win64 CPU_TARGET=x86_64
make install OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=[Lazarus Dir]\fpc\[FPC Ver]
- ここでLazarusを起動して64ビットWindowsのバイナリが生成できるか確認
- メインメニュー>プロジェクト>新規プロジェクト>プログラム>OK
- メインメニュー>プロジェクト>プロジェクトオプション>コード生成>対象とするOS: Win64>対象とするCPU: x86_64>OK
- fpc.cfgが設定されていないとか言われるが無視
- メインメニュー>実行>構築
- コマンドプロンプトから生成したバイナリを実行
- 動けばOK
Linux i386
- Windows 64bitで使ったbinutilsを使うが、古い中間ファイルが残っているとトラブルになるかもしれないので一回削除
cd /usr/local/src/
rm -rf binutils-2.22
- binutilsのソースを再度展開
tar xvzf binutils-2.22.tar.gz
cd binutils-2.22
- i386-linuxをターゲットにしてconfigure
./configure --target=i386-linux
- お決まりコマンド
make clean
make all
make install
- 「i386-linux-ar.exe」「i386-linux-as.exe」「i386-linux-ld.exe」「i386-linux-objdump.exe」「i386-linux-strip.exe」の5つのファイルを「[Lazarus Dir]\fpc\[FPC Ver]\bin\i386-win32」へコピー
- 下記のファイルを「[Cygwin Dir]\bin」から「[Lazarus Dir]\fpc\[FPC Ver]\bin\i386-win32」へコピー
- cygwin1.dll
- cygintl-8.dll
- cygiconv-2.dll
- コマンドプロンプトを管理者権限で起動し、FPCのソースコードフォルダに入る
- クロスコンパイル用のファイルをコンパイル・インストール
make clean
make all OS_TARGET=linux CPU_TARGET=i386
make install OS_TARGET=linux CPU_TARGET=i386 INSTALL_PREFIX=[Lazarus Dir]\fpc\[FPC Ver]
- Windowsのときと同様にコンパイル・実行チェック
Linux x86_64
Linux i386とやり方は同じですね。binutilsのターゲットは「x86_64-linux」、クロスコンパイル時のCPU_TARGETは「x86_64」を指定して作業すればOKのはずです。
タグ : FreePascal,Linux,binutils,cygwin,i386,x86_64,クロスコンパイル
2012/03/25 22:53:49 | Trackbacks (0) | Comments (0)
| Technology