スキームの FFI を使用して libpython へのバインディングを作成しようとしています。これを行うには、python の場所を取得して を作成しffi-lib
、そこから関数を作成する必要があります。たとえば、私はこれを行うことができます:
(module pyscheme scheme
(require foreign)
(unsafe!)
(define (link-python [lib "/usr/lib/libpython2.6.so"])
(ffi-lib lib))
これで問題ありませんが、関数をエクスポートする方法が思い浮かびません。たとえば、次のようなことができます。
(define Py_Initialize (get-ffi-obj "Py_Initialize" libpython (_fun -> _void)))
...しかし、どうにかして libpython (link-python によって作成された) への参照をグローバルに保存する必要があります。link-python が呼び出されたら、これらの関数をエクスポートする方法はありますか? 言い換えれば、モジュールを使用している誰かがこれを行うことができるようにしたいと思います:
(require pyscheme)
(link-python)
(Py_Initialize)
...またはこれ:
(require pyscheme)
(link-python "/weird/location/for/libpython.so")
(Py_Initialize)
...しかし、これでエラーが発生します:
(require pyscheme)
(Py_Initialize)
これどうやってするの?