在Qt应用程序中包含Python.h会导致对Qt函数的未定义引用

问题描述 投票:3回答:1

我想在我的项目中包含Python.h(来自我的Anaconda文件夹中的Python发行版)来调用python脚本。当我不包含python时,程序编译得很好。但是,一旦我这样做,我就会在Qt类中实现的函数中得到undefined reference错误(所以不是我自己的函数!)。我想要包含的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

和main.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)
python c++ qt anaconda python-3.5
1个回答
1
投票

这个问题是由使用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文件,但这是我所知道的唯一解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.