Я работаю над проектом, который требует от меня создания некоторых оболочек в Python для библиотеки C, которую мне нужно вызвать из Python. Для контекста, библиотека C, которую я использую, представляет собой набор файлов заголовков (.h) и статически связанных файлов библиотеки (.a)
Я решил использовать CFFI или Cython, чтобы выполнить свою работу. . Я следил за подобными примерами для CFFI - Взаимодействие кода C с CFFI , а это для Cython - Создание библиотеки C, вызываемой из Python, путем обертывания ее с помощью Cython . Теперь небольшие примеры программ, которые я пробовал в обоих этих модулях, более или менее имеют следующие шаги:
- Создание интерфейсного кода для вызова C API
- В CFFI это python файл, объявляющий C необходимые функции и заголовки
- В Cython это файл .pyx и модификации setup.py
- Создайте интерфейсный код для сгенерированного файлы
.so
для связующего кода сопряжения. - Вызов обернутых функций из другого сценария python путем импорта библиотеки сопряжения из файла
.so
.
Теперь это отлично работает для меня. Но мне придется выполнить go через два этапа выполнения в процессе (создание файла .so
, а затем фактическое выполнение сценария python с вызываемым C API).
Мне нужно знать, есть ли способ сделать все вышеперечисленное за один шаг выполнения. Например, я хочу запустить свой последний python скрипт, и он должен построить интерфейсный код и импортировать его на лету за одно выполнение .
Для большего контекста я пробовал SWIG, но не смог найти способ обернуть с ним статически связанные библиотеки .a
. То же самое и для ctypes.