2019年3月13日水曜日

NativeExtensions を開発するときに独自のヘッダファイルと so ファイルを使う方法

概要

apt や yum でインストールできるライブラリは特に気にする必要はありませんが場合によってはそれらを使ってライブラリをインストールできないことがあると思います
.h ファイルと .so ファイルが配布されておりそれらを使って NativeExtensions を開発したいことはあると思います
今回はそのような場合に .h.so ファイルを参照する方法を紹介します

環境

  • CentOS 7.5.1804
  • Ruby 2.5.0p0

extconf.rb を編集する

extconf.rb は Makefile を作成するためのファイルです
事前に関数の存在チェックやヘッダファイルの存在チェックができます
ここで自分が作成したオリジナルのライブラリのチェックなどを行います

require "mkmf"

abort "missing malloc()" unless have_func "malloc"
abort "missing free()"   unless have_func "free"

dir_config('mylib', '/usr/lib/mylib/include', '/usr/lib/mylib/lib64')
if have_header("mylib.h") and have_library('mylib')
  create_makefile "mylib/mylib"
end

あとはヘッダファイルを /usr/lib/mylib/include/mylib.h に配置し so ファイルを /usr/lib/mylib/lib64/mylib.so に配置すれば OK です
もし配置していない場合は extconf.rb の実行中にエラーになるため NativeExtensions のインストールに失敗します

また上記のように書いておけば include と lib64 のパスを自分で指定することもできるようになります

  • ruby extconf.rb --with-mylib-include=/path/to/include --with-mylib-lib=/path/to/lib64

こんな感じです
これで Makefile が作成されるのであとは make すれば NativeExtensions が作成されます

参考サイト

0 件のコメント:

コメントを投稿