1
0

Crystal言語でシングルバイナリを作る

Last updated at Posted at 2024-07-07

はじめに

タイトルをキャッチーにしたのは人集めです。ご容赦ください。あまりシングルバイナリの話はしていません。調べ物のスタートに使ってください。

  • Rubyでツールを配布するときにはGemにするのが一般的である。
  • 単純なツールであればCrystalで書いてバイナリにすることもできる。

Crystalで静的にリンクしたバイナリを作成する

公式では、

crystal build a.cr --static

とすればいいことにされているが、実際には動作しないことが多い。
そこで、muslのライブラリを使っている公式のDockerイメージを使用するとLinux用のバイナリを出力できる。
たとえばこんな感じ。

docker run --rm -it \
  -v $(pwd):/workspace \
  -w /workspace \
  crystallang/crystal:latest-alpine \
  crystal build a.cr --static --release

Shardsのライブラリなどを利用していて、C言語のライブラリに依存していることもあるだろう。その場合は下のようなコマンドを使ってツールをインストールしたりして頑張る。

docker exec alpine apk add cmake build-base readline-dev readline-static ncurses-dev ncurses-static ncurses-libs 

Crystalのコンパイラの中には、--cross-compile--mcpu などのオプションもあるが、LLVMに依存しているだけだと思うから、あまり信用しすぎない方がいいと思う。

Macでは静的にリンクしたバイナリの出力は諦めて homebrew-tap を使った方が幸せになれると思う。

Windowsも単に crystal build --static すればよく、RubyではWindows向けの実行ファイルを作るのはかなりの制限があるのでかなり便利である。ただし、Cのライブラリを導入するのは煩雑というか、まだ未完成。

もう少し詳しくは↓

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0