【发布时间】:2019-03-15 16:00:57
【问题描述】:
我将 Python 嵌入到 Qt C++ 中。当我在 Python 脚本中导入 cv2 时,它会因分段错误而崩溃。在 Python 中运行脚本有效。在没有 Qt 的情况下从 C++ 运行。
Python 脚本:工作
print("Importing cv2")
import cv2
print("cv2 imported")
C++:工作
#include <Python.h>
#include <string>
int main(int argc, char *argv[])
{
std::string module_name("PythonModule");
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyObject* pModuleDirPath = PyUnicode_FromString(".");
PyList_Append(sysPath, pModuleDirPath);
Py_DECREF(pModuleDirPath);
PyObject* pModuleName = PyUnicode_FromString(module_name.c_str());
PyObject* pModule = PyImport_Import(pModuleName);
Py_DECREF(pModuleName);
Py_DECREF(pModule);
Py_Finalize();
return 0;
}
Qt:打印“导入 cv2”后出现分段错误
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
std::string module_name("PythonModule");
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyObject* pModuleDirPath = PyUnicode_FromString(".");
PyList_Append(sysPath, pModuleDirPath);
Py_DECREF(pModuleDirPath);
PyObject* pModuleName = PyUnicode_FromString(module_name.c_str());
PyObject* pModule = PyImport_Import(pModuleName);
Py_DECREF(pModuleName);
Py_DECREF(pModule);
Py_Finalize();
}
.pro 文件:
LIBS += -L /usr/local/lib/python3.5m -lpython3.5m
INCLUDEPATH += /usr/include/python3.5m
版本:
Ubuntu 16.04
Python 3.5
opencv-python 3.4.2.17
Qt Creator 4.7.0 基于Qt 5.11.1
有人知道这个问题吗?
【问题讨论】:
-
.py文件的路径是什么?
-
当你指向“.”时您表示 .py 在可执行文件旁边,对于 Qt Creator,可执行文件位于 build 文件夹中,因此我建议使用完整路径或将 .py 文件复制到 build 文件夹中。
-
它在构建文件夹中。请注意,在所有情况下,python 脚本都会运行。但是当使用 Qt 时,它会打印“Importing cv2”并在 Import cv2 行上崩溃。
-
好吧,如果是这样,那看起来很奇怪,我试过了,它可以正常工作
-
使用调试器知道程序在哪一行坏了