【发布时间】:2016-01-26 10:50:20
【问题描述】:
我正在尝试将 Python 嵌入到我的 C++ 项目 (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 脚本/文件/字符串?
设置:
- Win7 Prof 64 位
- Qt 5.5.1
- g++.exe(Rev1,由 MSYS2 项目构建)5.3.0
- Python 3.5.1 64 位(从 https://www.python.org/downloads/release)/python-351/ 预构建)
【问题讨论】:
-
链接
-lpython35而不是-lpython3可能会有所不同。 -
[offtopic] 我建议看看
pythonqt(pythonqt.sourceforge.net) 这是绑定 Qt 应用程序和 python 的一种非常强大的方法(它是 PyQt 反过来) -
@bibi 我已经看过这个库,它看起来很完美。但是我在编译它/调试包含这个库的项目时遇到了问题。试图联系开发人员,但没有得到答复。所以我决定坚持使用 CPython API,因为我只需要运行脚本来转换字符串。