Rubyからsimstringを使うにはSWIGが必要です。 - @ledsun blog でビルドしたsimstring gemをRubyから実行時に次のエラーが出ていました。
ledsun@MSI:~/pubdictionaries►ruby -e 'require "simstring"' <internal:/home/ledsun/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': /home/ledsun/.rbenv/versions/3.0.1/lib/ruby/site_ruby/3.0.0/x86_64-linux/simstring.so: undefined symbol: Init_simstring - /home/ledsun/.rbenv/versions/3.0.1/lib/ruby/site_ruby/3.0.0/x86_64-linux/simstring.so (LoadError)
上記エントリではやりなおしたら出来ちゃいました。
もうちょっと原因を絞り込みます。
結論は、--swig
オプション付きのprepare.sh
で生成するexport_wrap.cpp
をコンパイルしないと上記エラーがでます。
#!/bin/sh # $Id:$ ln -s ../export.cpp ln -s ../export.h ln -s ../export.i if [ "$1" = "--swig" ]; then swig -c++ -ruby -o export_wrap.cpp export.i fi
prepare.sh
は--swig
オプションをつけると、swig
コマンドをつかってexport_wrap.cpp
を生成します。
export_wrap.cpp
の中にInit_simstring関数の定義があります。
SWIGEXPORT void Init_simstring(void) { size_t i; SWIG_InitRuntime(); mSimstring = rb_define_module("Simstring"); SWIG_InitializeModule(0); for (i = 0; i < swig_module.size; i++) { SWIG_define_class(swig_module.types[i]); }