我试图在我的C ++项目中嵌入Python(Qt5)。我的项目看起来像这样:
python_test.pro:
QT += core
QT -= gui
TARGET = python_test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += C:\Tools\Python\Python35_64\include
LIBS += -LC:\Tools\Python\Python35_64\ -lpython3
main.cpp中:
#include <Python.h>
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
Py_Finalize();
return a.exec();
}
编译时,我收到链接器错误,告诉我:main.cpp:-1: Error: undefined reference to `__imp_PyRun_SimpleStringFlags'
。
有趣的是,可以找到Py_Initialize()
和Py_Finalize()
。我读了一些关于定义Py_LIMITED_API
的东西,它隐藏了PyRun_SimpleStringFlags函数。但我不明白。
如果C API中没有这些函数,我应该如何运行Python脚本/文件/字符串?
设定:
答案 0 :(得分:1)
我在我的计算机上测试了这个(虽然没有Qt),-lpython35
编译成功,而-lpython3
没有编译。
所以
LIBS += -LC:\Tools\Python\Python35_64\ -lpython35
而不是
LIBS += -LC:\Tools\Python\Python35_64\ -lpython3