【问题标题】:Qt error: undefined reference to 'QDebug::~QDebug()'Qt 错误:未定义对 'QDebug::~QDebug()' 的引用
【发布时间】:2016-07-06 00:48:54
【问题描述】:

我正在用 caffe、opencv 3.1 和 Qt5.6 编译我的代码。以下是我的 .pro 文件。我这里没有包含实际的源文件名和头文件名。

QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = outsideSituationDetection
TEMPLATE = app

SOURCES += main.cpp\
           mainwindow.cpp \
           <and others>

HEADERS  += mainwindow.h \
        < and others >

FORMS    += mainwindow.ui

DEFINES += CPU_ONLY

QMAKE_CXXFLAGS += -std=c++11 -Wall -D_REENTRANT -D__STDC_CONSTANT_MACROS -pthread
QMAKE_CXXFLAGS += -DQT_COMPILING_QSTRING_COMPAT_CPP -DQT_COMPILING_QIMAGE_COMPAT_CPP

CONFIG += link_pkgconfig
PKGCONFIG += opencv

INCLUDEPATH += /usr/local/include /usr/local/lib /usr/lib
DEPENDPATH += /usr/local/include

LIBS += -L/usr/local/lib/ -lopencv_imgproc

LIBS += -lm -lglib-2.0 -lgthread-2.0 -lxml2 -pthread
INCLUDEPATH += /usr/include/glib-2.0
INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
INCLUDEPATH += /usr/include/libxml2

INCLUDEPATH += /usr/include/ \
           /usr/lib/x86_64-linux-gnu/ \
LIBS += -L/usr/lib/x86_64-linux-gnu/ -lglog -lpthread -lm -lrt -ldl -lnsl
DEPENDPATH += /usr/lib/x86_64-linux-gnu/


# BOOST Library
LIBS += -L/usr/lib/x86_64-linux-gnu/ -lboost_system
INCLUDEPATH += /usr/lib/x86_64-linux-gnu

#Caffe for CPU System
INCLUDEPATH += $$PWD/../../../../../src/caffe/build/include \
           $$PWD/../../../../../src/caffe/include \
           $$PWD/../../../../../src/caffe/build
unix:!macx: LIBS += -L$$PWD/../../../../../src/caffe/build/lib/ -lcaffe -lglog
INCLUDEPATH += $$PWD/../../../../../src/caffe/build
DEPENDPATH += $$PWD/../../../../../src/caffe/build

RESOURCES += icons.qrc

问题 - 当我编译代码时,我收到一堆“错误:未定义对 'QDebug::~QDebug()”的引用以及错误:未定义对 `QDebug::putString(QChar const* , unsigned long)'' 针对我所有的 .cpp 文件。 (我已经使用 Qt5.6 和 Qt5.7 成功构建并执行了另一个应用程序而没有错误。)

(.qtversion[qt_version_tag]+0x0):-1: error: undefined reference to `qt_version_tag' File not found (.qtversion[qt_version_tag]+0x0) in main.o

我尝试过的 - 检查 Qt 版本以确保我使用的是 Qt5.6。通过执行“sudo apt-get remove qt5-default”删除了已安装的 qt5-default。从 Qt5.7 降级到 Qt5.6 虽然没有任何区别。我已经从 /usr/include 和 /usr/share 中删除了 qt4 和 qt5 文件夹。

你能建议我可能缺少什么吗?

【问题讨论】:

    标签: qt


    【解决方案1】:

    我在文件中有多个'#include "QDebug"' 声明。删除它们并将其仅放在一个文件中可以消除错误。 (编辑-它不正确并且不起作用)

    什么有效 - 虽然我删除了旧版本的 Qt 3、4 和 5 ,但 qt 在内部使用 5.2.1 版本。我不知道他们是从哪里来的。但是当我在 /usr/lib/x86_linux_gnu/ 中删除它们时,代码编译了!我还在 qtchooser/default.conf 中明确指定了安装目录的路径。这可能不是最好的方法,但它仍然有效。

    【讨论】:

    • 真的吗?标头包含保护,因此您应该可以根据需要多次#include &lt;QDebug&gt;。我刚刚在 Qt 5.6 上确认了这一点,没有问题:#include #include int main() { qDebug()
    • 你是对的。这不是解决方案。我仍然有同样的问题。我不确定我能做什么。
    • 你做错了什么,因为你应该能够让多个 Qt 版本共存。您不需要删除它们中的任何一个。要使用某个 Qt 版本,您必须创建一个空的 build 文件夹,然后从 build 文件夹在源代码上调用 所选 Qt 的 qmake。它将使用选择的 Qt 在构建文件夹中设置 Makefile。例如。 mkdir build &amp;&amp; cd build &amp;&amp; /opt/Qt/5.6.1/bin/qmake ~/src/myproject &amp;&amp; gmake -j
    • 感谢您向我指出正确的做法。我是 Qt 的新手。我做了一些让事情在短时间内发挥作用的事情,但我绝对知道从长远来看这绝不是一个好的解决方案。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-06-05
    • 2013-10-11
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多