Проблема со связыванием расширения Python C с другой библиотекой - PullRequest
0 голосов
/ 30 июня 2018

Я нахожусь в процессе разработки расширения Python, чтобы позволить скрипту, запущенному на Raspberry Pi, управлять сенсором . Производитель датчика предоставил моей организации исходный код своего C API, и я пытаюсь создать набор привязок, чтобы сделать датчик доступным в скриптах Python.

Makefile, поставляемый с исходным кодом API, создал набор объектных файлов, которые я затем связал вместе в библиотеку (libvl53l1.a) с помощью команды:

ar -cvq libvl53l1.a * .o

Затем я добавил эту библиотеку в скрипт setup.py моего расширения, добавив этот флаг:

extra_compile_args = [ "- л: libvl53l1.a"]

Код, библиотека и сценарий setup.py в настоящее время находятся в одном каталоге для удобства. Установка библиотеки в Python с помощью команды (python3 setup.py build_ext --inplace) выполняется без ошибок, однако, когда я пытаюсь импортировать мою библиотеку в интерпретаторе Python, происходит сбой импорта из-за неопределенного символа «VL53L1_WaitDeviceBooted» в расширении .so файл. Перечисление символов в libvl54l1.a:

нм libvl53l1.a | grep "VL53L1_WaitDeviceBooted"

показывает, что библиотека выставляет символ этого имени. Поэтому я считаю, что компоновщик не может связать расширение с этой статической библиотекой. Есть ли какой-то шаг, который я пропускаю и который вызывает это? Я также попытался удалить расширение .a, как рекомендовано в документации по Python, но безрезультатно.

Спасибо

1 Ответ

0 голосов
/ 01 июля 2018

extra_compile_args=["-l:libvl53l1.a"]

Этот параметр добавляет -l:... к команде compilation , но компилятор игнорирует эту опцию, потому что это опция linking , и никакое связывание не выполняется компилятором.

Вы хотите: extra_link_args=["-lvl53l1"], что добавит -lvl53l1 к команде ссылки (компоновщик не будет игнорировать эту опцию при выполнении связи).

...