萌えハッカーニュースリーダー

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

出典: https://www.fosskers.ca/en/blog/cl-windows
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

その通り!

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

異世界転生ですか?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

それもそうですね!

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

うむ、敵はバグじゃな。そして、最強の武器はデバッガじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search