Как связать правильную версию Python при встраивании в C ++? - PullRequest
0 голосов
/ 16 апреля 2019

Я встроил интерпретатор Python в код C ++. Хорошо работает на высокоуровневом уровне:

PyRun_SimpleFileEx(fd, "/file_path/some_script.py", 1)

Но мне нужно передать некоторые аргументы в код Python, поэтому я попытался продвинуться вперед с кодом из документации Python о внедрении. Однако XCode жалуется на некоторые функции, которые не определены. Я думаю, что мой

#include <Python/Python.h>

Не добавляет правильную версию Python и, возможно, указывает на версию системы (2.7), в которой нет заголовков с правильными функциями.

Флаги моего компоновщика:

-lpython3.7m -ldl -framework CoreFoundation

Я добавил папку Python include из фреймворка в пути поиска заголовка:

../../Support/Lib/Python/include

и папка Python Lib от платформы до путей поиска в библиотеке:

../../Support/Lib/Python/lib

Папка поддержки аналогична указанной в папках вверх из решения.

XCode не может найти следующие функции: PyUnicode_DecodeFSDefault() и Py_FinalizeEx().

Первый определяется в unicodeobject.h, который включается в Python.h справа от того места, где он должен находиться в папке include, как я описал выше.

Я не уверен, что делаю неправильно, поэтому, возможно, кто-то может указать мне правильное направление. Заранее спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Хорошо, как всегда дьявол в деталях ... Я понял, что мне нужно только передать полный путь напрямую, пока не появится верхний каталог нужных мне заголовочных файлов. Подкаталоги не ищутся. Так что мой путь поиска в заголовке:

../../Support/Lib/Python/include/python3.7m

и мой путь поиска в библиотеке:

../../Support/Lib/Python/lib/python3.7 and then just include

Чтобы включить, я наконец только что сделал:

#include <Python.h>
...