我试图创建一个运行一些简单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退出状态
答案 0 :(得分:2)
我设置了一个类似的例子on my 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
答案 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