WindowsでRubyから呼び出せるC言語の共有ライブラリを作る

前提

  • RubyInstaller for WindowsRuby+Devkit (x64) をインストールずみ
  • C:\Ruby32-x64\msys64 に MSYS2がインストールされているものとする

Clang(コンパイラ)のインストール

  • C:\Ruby32-x64\msys64\msys2.exe のコンソールで下記のコマンドを実行
  • C:\Ruby32-x64\msys64\mingw64\bin にClangがインストールされる
pacman -S mingw-w64-x86_64-clang

ClangにPATHを通す

  • 他に影響を及ぼしたくないので、必要なときだけPATHを通すようにしたい
  • MSYS2のコンソールであれば、下記のコマンドを実行
    (MSYS2のインストールディレクトリがルートディレクトリになることに注意)
export PATH=$PATH:/mingw64/bin
set PATH=%PATH%;C:\Ruby32-x64\msys64\mingw64\bin
  • PowerShellであれば、下記のコマンドを実行
$ENV:Path="C:\Ruby32-x64\msys64\mingw64\bin;"+$ENV:Path

共有ライブラリをビルド

  • hoge.c から共有ライブラリ hoge.so をビルドしたい場合は下記のコマンドを実行
clang -fPIC -shared -o hoge.so hoge.c

Rubyからの呼び出し方

  • 参考までに下記にサンプルコードを示す。
  • 配列変数の渡し方、受け取り方に注意。
  • 共有ライブラリはシステムフォルダに配置するか絶対パスで指定しなければならない。
  • rubyソースからの相対パスで指定したい場合は、__dir__ 定数を利用する。