简单的QT程序没有编译 - 链接器/体系结构错误

时间:2014-03-12 21:35:39

标签: c++ qt

嘿,我有一个非常简单的qt程序似乎没有编译。我得到的错误是 "找不到架构x86_64"的符号;和"链接器命令失败,退出代码为1(使用-v查看调用)"。 PS:我使用的是mac os X版本10.9.2。我尝试将析构函数设为虚拟,并将该类放在单独的头文件中。两者都没有。

错误:

Undefined symbols for architecture x86_64:
  "vtable for QQ", referenced from:
      QQ::QQ(QWidget*) in main.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Test.app/Contents/MacOS/Test] Error 1
14:42:46: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project Test (kit: Desktop Qt 5.2.1 clang 64bit)
When executing step 'Make'

这是我的代码:

#include "qmainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QObject>  
#include <iostream>
#include <QTextEdit>
#include <QVBoxLayout>

using namespace std;

class QQ: public QWidget{
Q_OBJECT
public:

explicit QQ(QWidget* parent = 0) { };
virtual ~QQ() { };
void  print(){cout << value;};
public slots:
void changev(int n){value = 135;};
private:
int value;
};



int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QMainWindow mw;

QQ* a = new QQ(&mw);
//QPushButton* qp = new QPushButton("here");
//QObject::connect(qp, SIGNAL(clicked()), a, SLOT(changev(9)));


return app.exec();
}

2 个答案:

答案 0 :(得分:2)

您的问题似乎源于Q_OBJECT声明。在我的机器上,只需将QQ类移动到单独的头文件即可。在将类移动到头文件后,请记住make clean并再次运行qmake -projectqmake

有关详细信息,请参阅以下问题: Q_OBJECT throwing 'undefined reference to vtable' error

答案 1 :(得分:0)

我发生了同样的事情。我的应用程序编译完全正常,但后来停止编译并显示这些相同的2错误。我试过Build&gt; Build All,Build&gt; qmake,Build&gt;全部清洁,构建&gt;跑,但没有任何效果。我删除了项目中的.user文件(QtCreator关闭)并运行qmake然后再次运行,这仍然没有帮助。不知何故,该项目已经腐败。

幸运的是,我从前一天开始备份。所以,我复制了备份,添加了来自其他腐败项目的新更改,重新编译,瞧 - 它工作了!