我认为这个问题很简单,但我并不熟悉如何设置我的环境,因为有人为我做了这个。我认为它与Makefile有关。请原谅我对此的无知。我没有使用Qt IDE。我遇到的错误是:
g++ -I /usr/include/qt4 -c -o main.o main.cpp
In file included from main.cpp:3:0:
xxml.h:4:30: fatal error: QXmlDefaultHandler: No such file or directory
#include <QXmlDefaultHandler>
^
compilation terminated.
make: *** [main.o] Error 1
我的xxml.h看起来像这样:
#ifndef XXML_H
#define XXML_H
#include <QXmlDefaultHandler>
class XXml : public QXmlDefaultHandler
{
public:
XXml();
virtual ~XXml();
bool startElement(const QString &, const QString &, const QString &,
const QXmlAttributes &);
private:
};
#endif
生成文件:
TARGET=x
OBJS=main.o xxml.o
QT_LIBS=-lQtGui -lQtCore
QT_LIBDIR=/usr/lib/i386-linux-gnu
QT_INCDIR=/usr/include/qt4
CXXFLAGS=-I $(QT_INCDIR)
$(TARGET): $(OBJS)
g++ $^ -L $(QT_LIBDIR) $(QT_LIBS) -lpthread -o $@
moc_%.cpp: %.h
/usr/lib/i386-linux-gnu/qt4/bin/moc -o $@ $^
clean:
rm $(TARGET) $(OBJS)
答案 0 :(得分:1)
您可以按
搜索缺少的头文件find /usr/include/qt4 -iname '*QXmlDefaultHandler*'
输出类似于
的/ usr /包括/ QT4 / QtXml / QXmlDefaultHandler
如您所见,头文件位于名为QtXml
的子目录中。当你为include添加前缀时,它应该编译,例如
#include <QtXml/QXmlDefaultHandler>
QXmlDefaultHandler
属于QtXml
。要解决链接器错误,必须将相应的库添加到QT_LIBS
。要找出所需的内容,请说
pkg-config --libs QtXml
将显示
-lQtXml -lQtCore
您已经libQtCore
了,所以只需将-lQtXml
添加到前面
QT_LIBS=-lQtXml -lQtGui -lQtCore
正如@MykhayloKopytonenko建议的那样,最好添加适当的包含路径。 pkg-config
也为此提供必要的编译器标志,只需输入
pkg-config --cflags QtXml
你得到(至少在我的系统上)
-DQT_SHARED -I / usr / include / qt4 -I / usr / include / qt4 / QtXml -I / usr / include / qt4 / QtCore
将其添加到Makefile
QT_CFLAGS = -DQT_SHARED -I/usr/include/qt4 -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtCore
CXXFLAGS = $(QT_CFLAGS)
如果您只想要包含标记,请改用--cflags-only-I
pkg-config --cflags-only-I QtXml
答案 1 :(得分:0)
终于解决了!
在xxml.h上添加#include <QtXml/QXmlDefaultHandler>
并在Makefile上的-lQtXml
上添加QT_LIBS
就可以了。
谢谢大家! :)