使用Linux中的QXmlDefaultHandler编译错误c ++

时间:2015-04-15 05:39:50

标签: c++ linux qt

我认为这个问题很简单,但我并不熟悉如何设置我的环境,因为有人为我做了这个。我认为它与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)

2 个答案:

答案 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就可以了。

谢谢大家! :)