Я пытаюсь сделать сценарий C ++, который будет выполнять простой код Python:
// t.cpp
#include <Python.h>
int main(int argc, char* argv[])
{
Py_Initialize();
PyRun_SimpleString("print('TEST PASSED')");
Py_Finalize();
return 0;
}
После запуска g++ t.cpp
Я получаю ошибку:
t.cpp: 1: 20: фатальная ошибка: Python.h: нет такого файла или каталога
компиляция прекращена
Я нашел много похожих вопросов, связанных с IDE или другим программным обеспечением для разработки, или они были решены путем установки python3-dev
, python3-dev
пакет уже установлено, и я даже попытался вручную включить заголовок при попытке компиляции:
g++ t.cpp -I ~/.virtualenvs/MainEnv/include/python3.5m/Python.h
g++ t.cpp -I /usr/include/python3.5m/Python.h
Ничто не меняет.
Как я могу исправить эту ошибку?
ОБНОВЛЕНИЕ: я обнаружил, что с помощью g++ t.cpp -I /usr/include/python3.5/
кажется, включает заголовок, но затем он сталкивается с большим количеством ошибок:
t.cpp :(. text + 0x10): неопределенная ссылка на `Py_Initialize ‘
t.cpp :(. text + 0x1f): неопределенная ссылка на `PyRun_SimpleStringFlags ‘
t.cpp :(. text + 0x24): неопределенная ссылка на `Py_Finalize ‘
collect2: error: ld вернул 1 состояние выхода
Я создал аналогичный пример на моем GitHub
g++ t.cpp
отсутствует несколько вещей:
-I/path/to/headers/
)-lpython3.5m
)Вы также можете получить эти флаги с pkg-config
$ pkg-config python-3.5 --libs --cflags
-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m -lpython3.5m
Ваша командная строка должна выглядеть примерно так g++ -I/usr/include/python3.5m t.cpp -lpython3.5m
#include <...>
предназначен для включений, которые поставляются с компилятором.
использование #include "Python.h"
для любых других включает.