我正在尝试使用方案的 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)
我怎样才能做到这一点?