使用 Makefile 构建 qt 类时链接失败
Linkage failure when building qt class with Makefile
我正在尝试将这样的类添加到项目中^
//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'
任何人都可以提供建议吗?
尽管它可能碰巧有效,但您不应该只有一个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 然后可以进行调整可能会更容易。
相关文章:
- mapreduce c编程与-fPIC链接失败,如何解决?
- 引用构造函数时链接失败
- 嵌入 python3.6 和 MinGW 在C++链接失败
- MAKE/CMAKE子目录链接到外部库的链接失败
- 与 CMAKE 的静态链接失败
- Android中的OpenCV 4.0.1链接失败
- 在静态库中链接失败,但链接共享库成功
- .so中存在的符号已编译.o引用了它,但链接失败
- 使用签证编译 dll / exe - 链接失败
- 在C++程序上使用mpicc链接失败
- 与iOS项目上的C 库链接失败
- C++链接失败-ld:找不到[makefile][gcc/cygwin]
- clang++链接失败:错误:源文件不是有效的UTF-8
- OpenCV:提供给imread()的链接失败
- 错误: /usr/bin/ld: 最终链接失败: 文件被截断
- 链接失败。如何使用'NtQuerySystemTime'窗口功能?
- 变量模板链接失败
- 克隆链接失败
- 安特尔和链接失败
- 最终链接失败:包含 windows.h 时参数无效