我在 OSX Lion 中运行 QtCreator,每当我创建一个需要 Q_OBJECT 宏的类时,我都会在尝试构建我的应用程序时遇到错误。该类的代码如下,我收到的错误也是如此。有什么线索吗?
注意:我已经尝试清理、运行 qmake 和重新构建都无济于事。
#ifndef TASKLIST_H
#define TASKLIST_H
#include <QObject>
class TaskList : public QObject
{
Q_OBJECT
public:
explicit TaskList(QObject *parent = 0 );
public slots:
void addTask();
void displayTasks();
};
#endif // TASKLIST_H
错误:
:-1: error: symbol(s) not found for architecture x86_64
:-1: error: collect2: ld returned 1 exit status
最佳答案
Qt Creator 中似乎仍然存在错误。
我有一个大型项目,其中有许多类都具有 Q_OBJECT,而另外一些类没有 Q_OBJECT。它工作正常。但是,如果我将 Q_OBJECT 添加到其中一个没有它的类中,我会在尝试构建它时收到此“collect2:ld 返回 1 退出状态”错误。
检查构建目录,我发现这个类的 moc 文件丢失了。 Qt 只是不为它创建 moc 文件!但是,如果我从项目中删除头文件和 cpp 文件并再次添加它们,它就可以工作,生成 moc 文件并成功构建项目。
这个问题似乎只有在我有一个没有 Q_OBJECT 的类并且它在过去成功构建时才会发生。在添加“Q_OBJECT”之前从未编译过的带有 Q_OBJECT 的新类总是可以正常工作。
因此,如果发生此问题并且您确定已正确包含所有内容(并且注释掉 Q_OBJECT 可以正确构建项目),请执行以下操作:
- 从项目中删除 .h 和 .cpp 文件(您刚刚在其中添加了 Q_OBJECT)。
- 再次将它们添加到项目中
- 清理项目
- 重新构建它。
编辑
在某些情况下,运行 qmake
(构建/运行 qmake)后跟 Clean All
就足够了。
关于c++ - 为什么 Q_OBJECT 宏会导致问题 (Qt)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271679/