Я пытаюсь создать привязку к libpython, используя схему FFI. Для этого мне нужно получить местоположение 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)
Как я могу это сделать?