g ++ - Python.h:没有这样的文件或目录

时间:2017-07-10 01:47:05

标签: c++ python-3.x ubuntu g++

我试图创建一个运行一些简单Python代码的C ++脚本:

// 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&#39;

     

t.cpp :(。text + 0x1f):未定义对`PyRun_SimpleStringFlags&#39;

的引用      

t.cpp :(。text + 0x24):未定义引用`Py_Finalize&#39;

     

collect2:错误:ld返回1退出状态

3 个答案:

答案 0 :(得分:2)

我设置了一个类似的例子on my 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 :(得分:0)

switch适用于编译器附带的包含 将#include <...>用于任何其他包含。

答案 2 :(得分:0)

运行以下命令来编译代码:

mytest.cpp

#include <Python.h>

int main(int argc, char* argv[])
{
    Py_Initialize();
    PyRun_SimpleString("print('TEST PASSED')");
    Py_Finalize();
    
    return 0;
}

编译

$ g++ mytest.cpp `pkg-config python3-embed --libs --cflags` -o mytest
$ ./mytest