g ++ — Python.h: нет такого файла или каталога

Я пытаюсь сделать сценарий 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 состояние выхода

-1

Решение

Я создал аналогичный пример на моем GitHub

g++ t.cpp отсутствует несколько вещей:

  • Скажите g ++, где находятся заголовки для cpython ( -I/path/to/headers/)
  • Скажите g ++, чтобы ссылка на сайт против libpython (по -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

1

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

#include <...> предназначен для включений, которые поставляются с компилятором.
использование #include "Python.h" для любых других включает.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector