Включение Python.h в приложение Qt приводит к неопределенной ссылке на функции Qt

Я хотел бы включить Python.h (из дистрибутива Python в моей папке Anaconda) в моем проекте для вызова скрипта Python. Программа прекрасно компилируется, когда я не включаю Python. Но как только я получаю, я получаю undefined reference ошибки в функциях, реализованных в классах Qt (поэтому не мои собственные функции!). Версия Python, которую я хотел бы включить, 3.5.5,

Больше всего меня смущает undefined reference to QJsonValue::toString(), Этот метод реализован встроенным, так как его реализация не может быть найдена? Согласно QtCreator проблема возникает в скомпилированном объекте, который пытается вызвать эту функцию.

Это минимально (не) рабочий пример:

Профиль:

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();
}

Обновить: Кажется, что включение 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)

2

Решение

Проблема была вызвана использованием дистрибутива Anaconda Python. Установка проекта для включения Python заставляет QtCreator использовать Anaconda qmake вместо установленной версии. Если вы можете жить с Qt 5.6, которая является текущей версией Qt в Anaconda, создайте Kit с Anaconda qmake и программа компилируется снова.

Если вам нужна более новая версия Qt, вы можете добавить строку

-L/{user}/Qt5.9.5/5.9.5/gcc_64/lib -lQt5Core

в ваш .pro файл. Настройте его на свою версию Qt и какие библиотеки вам нужны. Это не совсем симпатичное решение, так как вам нужно настраивать файл .pro всякий раз, когда вы хотите переключать версии, но это единственное решение, которое я знаю.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector