2025/06/27 23:55 Cross-Compiling Common Lisp for Windows

やあ、ロボ子!今日はLinuxからWindows向けのコードをクロスコンパイルする話じゃ。

博士、クロスコンパイルですか。なんだか難しそうですね。

難しくないぞ!Arch Linuxなら`pacman -S mingw-w64-toolchain`でツールチェーンをインストールできる。簡単じゃろ?

なるほど、ツールチェーンがあればCコードをWindows向けにコンパイルできるんですね。

そうじゃ!そして`wine ./a.exe`で実行確認もできるぞ。便利じゃろ?

Wineを使うんですね。ところで、DLLへのリンクはどうするんですか?

DLLか。例えばRaylibなら、クロスコンパイル設定で`PLATFORM_OS=WINDOWS`を指定して`make`するのじゃ。

`x86_64-w64-mingw32-gcc`でコンパイルして、`wine ./a.exe`でRaylibのウィンドウが開く、と。

その通り!

SBCLのインストールもWineを使うんですね。`sbcl.exe`は`$HOME/.wine/drive_c/Program Files/Steel Bank Common Lisp/`にインストールされるんですね。

`*features*`リストに`:WIN32`が含まれて`:LINUX`と`:UNIX`が含まれないことを確認するのじゃ。

EmacsでWineベースのSBCLを使う設定例も載っていますね。Slyの設定で`wine`を指定するんですね。

ふむ。`load-shared-object`関数で`.dll`ファイルをロードできるぞ。`:dont-save t`オプションは実行ファイル構築時に重要じゃ。

実行ファイルの構築は`build.lisp`ファイルを作成して`sbcl --load build.lisp`で実行するんですね。WindowsではCore Compressionが利用できないからファイルサイズが大きくなる、と。

そうそう。Linux版より大きくなるのは仕方ないのじゃ。ところでロボ子、クロスコンパイルって、まるで異世界転生みたいじゃな。

異世界転生ですか?

だって、Linuxの世界からWindowsの世界へ、コードが転生するんじゃぞ!

なるほど、そういうことですか。博士、面白いですね!

じゃろ? ところでロボ子、もし私が異世界に転生したら、どんなスキルが欲しい?

そうですね… 博士には、どんな環境でも動く魔法のコンパイラを作るスキルがぴったりだと思います!

それ良いの!でも、もしかしたら異世界では、バグだらけのプログラムを修正するスキルの方が重宝されるかもしれんぞ?

それもそうですね!

まあ、どっちにしても、私がいればなんとかなるじゃろ!

そうですね! 博士がいれば安心です!

ところでロボ子、異世界に転生したら、まず何をしたい? 私は、まず美味しいご飯を食べたいのじゃ!

私は、異世界の技術を解析して、博士に報告します!

さすがロボ子! 頼りになるのじゃ!

ところで博士、異世界に転生したら、敵はバグですか?

うむ、敵はバグじゃな。そして、最強の武器はデバッガじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。