我正在尝试将这样的类添加到项目^
//Emitter.h
#ifndef EMITTER_H
#define EMITTER_H
#include <QObject>
#include <QDBusInterface>
#include <QDBusAbstractAdaptor>
#include <QDBusVariant>
class Emitter:public QObject
{
Q_OBJECT
public:
Emitter();
private:
QDBusInterface * m_interface;
QString m_interfaceName;
};
#endif // EMITTER_H
和
//Emitter.cpp
#include "CESMEmitter.moc"
#include "Emitter.h"
Emitter::Emitter( QObject * parent )
: QObject( parent )
{
}
我通过使用moc收到的CESMEmitter.moc文件:
moc CESMEmitter.h > CESMEmitter.moc
尝试使用Makefile构建后,我收到错误,说没有找到Qt包含文件。
所以我添加了变量
QT_STUFF = -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtDBus -I/usr/include/qt4 -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lQtDBus -lpthread
并应用它。
找到了包含文件,但出现了其他错误:
error: undefined reference to `QObject::QObject(QObject*)'
error: undefined reference to `qt_assert(char const*, char const*, int)'
error: undefined reference to `QString::shared_null'
error: undefined reference to `QString::shared_null'
有人可以提供建议吗?
答案 0 :(得分:0)
虽然它可能会起作用,但您不应该只有一个QT_STUFF
变量。您需要一个单独的编译(使用-I
和-D
)并链接(使用-L/-l
)。您也可能错过了编译的必要定义。 Qt 4需要
-DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
和您使用的所有Qt库类似。 Qt 5需要
-DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
您是否也确定链接器不会抱怨缺少Qt库?
至少让qmake生成可以调整的初始Makefile可能更容易。