「あなくつ」のおもちゃばこ

Blog

WindowsでFreePascalコンパイラのクロスコンパイル環境を設定する

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

(※ コンパイルはできたけど、やり方が正しいか謎)

  1. Cygwinのシェルを立ち上げて、コンパイルで使うディレクトリへ移動
    mkdir -p /usr/local/src/
    cd /usr/local/src/
    
  2. 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
    
  3. x86_64-w64-mingw32をターゲットにしてconfigure
    ./configure --target=x86_64-w64-mingw32
    
  4. お決まりのコマンドを実行 (エラーになる場合、何らかのパッケージが不足していると思うので、Cygwinで追加する)
    make clean
    make all
    make install
    
  5. コンパイルできれば「[Cygwin Dir]\usr\local\bin」に必要なファイルがコピーされる。
  6. 「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」へコピー
  7. コピーしたファイルをそれぞれ「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」へリネーム
  8. FPCのサイトからLazarusに付属しているFPCと同じバージョンのソースコードをダウンロード
  9. ダウンロードしたファイルを展開
  10. コマンドプロンプトを管理者権限で起動し、展開したフォルダに入る
  11. クロスコンパイル用のファイルをコンパイル・インストール
    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]
    
  12. ここでLazarusを起動して64ビットWindowsのバイナリが生成できるか確認
    1. メインメニュー>プロジェクト>新規プロジェクト>プログラム>OK
    2. メインメニュー>プロジェクト>プロジェクトオプション>コード生成>対象とするOS: Win64>対象とするCPU: x86_64>OK
    3. fpc.cfgが設定されていないとか言われるが無視
    4. メインメニュー>実行>構築
    5. コマンドプロンプトから生成したバイナリを実行
    6. 動けばOK

Linux i386

  1. Windows 64bitで使ったbinutilsを使うが、古い中間ファイルが残っているとトラブルになるかもしれないので一回削除
    cd /usr/local/src/
    rm -rf binutils-2.22
    
  2. binutilsのソースを再度展開
    tar xvzf binutils-2.22.tar.gz
    cd binutils-2.22
    
  3. i386-linuxをターゲットにしてconfigure
    ./configure --target=i386-linux
    
  4. お決まりコマンド
    make clean
    make all
    make install
    
  5. 「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」へコピー
  6. 下記のファイルを「[Cygwin Dir]\bin」から「[Lazarus Dir]\fpc\[FPC Ver]\bin\i386-win32」へコピー
    • cygwin1.dll
    • cygintl-8.dll
    • cygiconv-2.dll
  7. コマンドプロンプトを管理者権限で起動し、FPCのソースコードフォルダに入る
  8. クロスコンパイル用のファイルをコンパイル・インストール
    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]
    
  9. 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

Trackback

URL : https://www.ana-kutsu.com/mt/mt-tb.cgi/595

Comment

(Private)
Authentication
refresh captcha

画像の中に見える文字を入力してください。

« Locationを使うHTTPヘッダのステータスコードによってリファラが変わるか | Top | VPSとか »

  • Top
  • Software
  • Blog
  • Laboratory
  • Profile
Search
Feeds of Blog
Archives

Copyright © 2004-2023 Ana-Kutsu All Rights Reserved.