В настоящее время у меня есть библиотека, написанная на C ++, построенная с использованием автоинструментов GNU, и я хотел бы добавить к ней интерфейс Python. Используя SWIG, я разработал интерфейс, но мне трудно понять, как интегрировать компиляцию модуля Python с остальной частью процесса.
Я просмотрел AM_PATH_PYTHON, но этот макрос, похоже, не устанавливает путь включения для Python.h, поэтому, когда я компилирую свой модуль, я получаю кучу ошибок об отсутствии включаемых файлов. Есть ли способ получить путь включения Python и ldflags из AM_PATH_PYTHON?
Просто для записи, я не думаю, что можно будет использовать метод distutils Python (setup.py), поскольку для этого требуется расположение библиотеки, чтобы связать новый модуль. Поскольку библиотека еще не была установлена во время компиляции, мне пришлось бы использовать относительный путь (например, ../src/lib.so), который, конечно, сломался бы после установки модуля Python (поскольку библиотека тогда находится в / usr / lib или / usr / local / lib вместо этого.)
РЕДАКТИРОВАТЬ:
Теперь он может найти компилируемый файл .h, но после его установки (в правильном месте) Python не может загрузить модуль. Код создает foo.so, и когда я "импортирую foo", я получаю следующее:
ImportError: dynamic module does not define init function (initfoo)
Однако если я переименую его из foo.so в _foo.so, он загрузится и будет работать нормально, за исключением того, что мне придется «импортировать _foo», чего я бы предпочел не делать. Когда я следую инструкциям SWIG по созданию _foo.so в текущем каталоге, «import foo» работает, поэтому я не уверен, почему он ломается, когда библиотека устанавливается в каталог сайта.
РЕДАКТИРОВАТЬ2:
Оказывается, проблема заключалась в том, что я забыл скопировать foo.py, созданный SWIG, в каталог установки вместе с _foo.so. Как только я это сделал, все заработало, как ожидалось! Теперь мне просто нужно выяснить некоторые правила automake, чтобы скопировать файл в каталог установки ...
pkgpythondir_DATA = foo.py
. - person Jack Kelly   schedule 26.02.2011