Установите флаги Xcode, чтобы встроить Python в мой проект C ++

Я пытаюсь встроить Python в мой проект C ++. Мне нужно сделать это для того, чтобы использовать некоторые функции, которые реализуют тест Колмогорова-Смирнова, которые недоступны в C ++.

Сейчас я просто пытаюсь понять, может ли Xcode связать и скомпилировать простую программу, которая встраивает Python.
Код, который я пытаюсь скомпилировать, выглядит следующим образом:

#include<Python/Python.h>

int main(int argc, const char * argv[]) {

Py_Initialize();
PyObject* variable;
Py_Finalize();
return 0;
}

Насколько я могу понять из инструкций, которые я прочитал здесь: 1. Встраивание Python в другое приложение — 1.6 Компиляция и компоновка в Unix-подобных системах и здесь: Справочное руководство по API Python / C — Введение для того, чтобы это скомпилировать, я должен добавить некоторые дополнительные флаги для компилятора и компоновщика.

Чтобы выяснить, какие флаги мне нужно добавить, я запустил в своем терминале следующие две команды (из которых я включил соответствующий вывод):

$ python3.6-config --cflags
-I/Users/user/anaconda3/include/python3.6m -I/Users/user/anaconda3/include/python3.6m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/user/anaconda3/include -arch x86_64 -I/Users/user/anaconda3/include -arch x86_64

$ python3.6-config --ldflags
-lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation

Где я заменил фактическое имя моей пользовательской папки на user,

Теперь, чтобы добавить эти флаги в компилятор и компоновщик Xcode, я зашел в окно настроек своего проекта и под Build Settings -> Other C Flags а также Build Settings -> Other Linker Flags Я добавил флаги, о которых сообщил выше.

Но когда я компилирую, я получаю эту ошибку:

Apple Mach-O Linker (ld) Error Group
clang: error: linker command failed with exit code 1 (use -v to see invocation)

И это не пройдет, даже если я прокомментирую все строки в main функция кроме return 0,

Я не понимаю, что я делаю не так.

я использую Xcode 8.3.2 и мой дистрибутив Python: Python 3.6.1 |Anaconda 4.4.0

0

Решение

Хорошо, я думаю, что нашел решение. Не уверен, что он действительно правильный (так как я не эксперт, и я не совсем понимаю причину, почему сейчас это работает), но я все равно опубликую его.

Дело в том, что если вы посмотрите на инструкции на этой странице: 1. Встраивание Python в другое приложение — 1.6. Компиляция и компоновка в Unix-подобных системах вы можете видеть, что при выполнении команды python3.6-config --ldflags вывод содержит флаг -L/opt/lib/python3.4/config-3.4m в то время как в моем случае это не так.

Итак, после выяснения, что флаг, который дал мне ошибку компоновки был -lpython3.6mЯ подумал, что, возможно, это связано с тем, что компоновщик не может найти каталог, в котором находится мой дистрибутив Python, или что-то в этом роде.

Поэтому я посмотрел на своем жестком диске путь к папке с именем, похожим на имя, показанное на веб-странице, и обнаружил, что /Users/user/anaconda3/lib/python3.6/config-3.6m-darwin был путь к папке с именем, очень похожим на то, что я искал, за исключением «-darwin» в конце имени папки, которое, вероятно, там, потому что я нахожусь в дистрибутиве MacOS (может быть, поэтому команда python3.6-config --ldflags не нашел это? Я не знаю).

После этого я просто добавил -L/Users/user/anaconda3/lib/python3.6/config-3.6m-darwin в начале Xcode «Other Liker Flags» и все (почти) скомпилировано просто отлично.

Я говорю «почти», потому что мне также пришлось переименовать include в начале моего кода от #include<Python/Python.h> в #include<Python.h> (может быть, потому что при использовании первого я включаю системный дистрибутив Python по умолчанию, а во втором я включаю Anaconda? Опять же, я не знаю).

Во всяком случае, теперь все компилируется просто отлично, и я подумал рассказать, как я это сделал на случай, если кто-то другой окажется в такой же ситуации.

0

Другие решения

Других решений пока нет …