У меня есть некоторые определения cffi, распространяемые по нескольким подкаталогам проектов - каждый файл cffi определяет типы и функции, каждый из которых компилируется в файл _<package>.py
для загрузки. В окончательном приложении I ffi.include()
верхние уровни (которые рекурсивно ffi.include()
нижнего уровня) и сгенерировать компиляцию файла _<app>.py
для загрузки в приложение. Я использую один экземпляр ffi
для загрузки файлов *.so
. Однако я не вижу, как это загружает распространенные файлы _<package>.py
в приложение. Я получаю следующее сообщение об ошибке (пример):Несколько определений ffi с ffi.include (...)
два отдельных файла FFI определение,
root/get/ffi_getA.py
иroot/use/ffi_useA.py
, какие функции C являются частью одной и той же библиотеки, скажем libA.so
.
ffi_getA.py
:
from cffi import FFI
ffi=FFI()
ffi.set_source("getA",None)
ffi.cdef('''
typedef ... A; // type also used in another ffi definition.
const A* get_A();
''')
ffi_useA.py
:
from cffi import FFI
ffi=FFI()
ffi.set_source("useA",None)
from root.get import ffi_getA
ffi.include(ffi_getA.ffi) # makes available type A
ffi.cdef('''
const void* use_A(const A*); // use type A
''')
В приложении:
from root.get import getA # compiled ffi
from root.use import useA # compiled ffi
libAget = getA.ffi.dlopen("libA.so")
libAuse = useA.ffi.dlopen("libA.so")
a = libAget.getA()
libAuse.useA(a) # !!! mixing !!!, a is indeed of type A ...
# ... but from a different ffi instance.
Это смешение не будет работать, так что вопрос:
Как получить доступ/загрузить функции cdef, распространяемые по различным скомпилированным объектам ffi через общий/единственный объект ffi?
Похоже, cffi не делает то, что вы ожидаете от него.Но вам нужно придумать конкретный пример, чтобы мы могли помочь вам (или исправить cffi :-) –
@stustd вместо того, чтобы редактировать ваш вопрос, чтобы поделиться найденным вами решением, отправьте его как отдельный ответ и примите его , Вы должны объяснить это немного больше. –