在Qt应用程序中包含Python.h会导致对Qt函数的未定义引用
Including Python.h in Qt application causes undefined reference to Qt functions
我想在我的项目中包含Python.h
(来自我的 Anaconda 文件夹中的 Python 发行版(来调用 python 脚本。当我不包含python时,该程序可以很好地编译。但是一旦我这样做,我就会undefined reference
Qt类中实现的函数出错(所以不是我自己的函数!我想包含的python版本是3.5.5
。
最让我困惑的部分是undefined reference to QJsonValue::toString()
.此方法是内联实现的,那么怎么找不到它的实现呢?根据QtCreator的说法,问题源于尝试调用此函数的编译对象。
这是一个最低限度(不是(工作的例子:
.pro 文件:
QT -= gui
CONFIG += c++11 console no_keywords
SOURCES += main.cpp
INCLUDEPATH += {path to python include}
LIBS += -L{path to python lib} -lpython3.5m
和主.cpp文件:
#include <Python.h>
#include <QCoreApplication>
#include <QJsonValue>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
PyObject *obj;
QJsonValue value;
value.toString();
return a.exec();
}
更新:似乎包括来自Anaconda的Python导致了这个问题。当我删除LIBS += -L{path to python lib} -lpython3.5m
时,它可以很好地编译。当我删除INCLUDEPATH += {path to python include}
但保留另一行时,出现以下错误:
/{user}/build-TestProject-Qt_5_9-Debug/TestProject: /{user}/anaconda3/lib/libQt5Core.so.5: version `Qt_5.9' not found (required by /{user}/build-TestProject-Qt_5_9-Debug/TestProject)
该问题是由使用 Anaconda 的 Python 发行版引起的。将项目设置为包含Python会导致QtCreator使用Anaconda的qmake
而不是已安装的版本。如果你能接受Qt 5.6,这是Anaconda中Qt的当前版本,那么用Anaconda的qmake
创建一个工具包,程序就会再次编译。
如果您需要更新版本的Qt,可以添加以下行
-L/{user}/Qt5.9.5/5.9.5/gcc_64/lib -lQt5Core
到您的 .pro 文件。根据您的Qt版本和所需的库进行调整。这不是一个漂亮的解决方案,因为每当您想要切换版本时,您都需要调整 .pro 文件,但这是我所知道的唯一解决方案。
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何在qt中从另一个类调用函数
- 触发时无法将 QAction 链接到函数 (Qt 5)
- QT 如何将 Qlist 传递给类构造函数
- 在 QT 中运行延迟的函数
- 在Qt应用程序中包含Python.h会导致对Qt函数的未定义引用
- 通过插槽打印/显示QT函数调用的内容
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- Qt-函数的未定义引用-Dante API库
- 如何调用作为插槽的qt函数
- 从Javascript端调用Qt函数(QWebView)
- QT C++函数,具有字符串的可选参数
- Qt C++函数中断删除未知变量
- 如何从非Qt函数访问Qt资源数据
- 从Javascript代码中调用Qt函数
- 将QAction连接到Qt5中的nonmember-qt函数
- 如何在QWebengine中调用Javascript中的c++ /Qt函数
- 寻找QT函数将qint64类型的变量(整数)四舍五入到最接近的十
- 我如何在线程完成后运行我的Qt函数
- 一些Qt函数/构造函数参数的内存管理