uimのschemeから共有ライブラリにアクセスするには、 モジュールを作って(module-load)する、という方法が用意されているのだけど、 そもそも共有ライブラリを作成できる言語処理系でないとモジュールを作成できないし、ちょっとライブラリを試したいだけなのにファイルを作るのはめんどう。
ということで、uim-trunkにlibffiにアクセスするモジュールを投入した。
libffi
をインストール後、
--with-ffiでconfigureしたuimをインストールすれば、
uim-shから、
uim> (module-load "ffi")
#t
(define libm
(dlopen "libm.so" (assq-cdr '$RTLD_LAZY (dlopen-mode))))
libm
uim> (ffi-function libm 'double "atan" '((double . "1.0")))
"0.785398"
uim> (dlclose libm)
#t
とかできる。
もちろん引数の数や型を間違えると即死するので注意が必要。
- 無茶な例: gist:207980 リトルエンディアンの32bitCPU前提だし、ここまでくるとモジュール作ったほうがいい。まねしちゃだめ。