【问题标题】:Qt undefined reference to `pugi::xml_document::xml_document()`Qt 未定义对`pugi::xml_document::xml_document()` 的引用
【发布时间】:2017-04-08 07:33:38
【问题描述】:

最近我正在使用 Qt/C++/xml 和其他一些东西开发一个项目。我必须从 xml 文件中获取一些字符串值。为此,我正在使用

#include "pugixml.hpp".

但是当我使用 pugi::xml_document document; 时,它会给出如下错误。

undefined reference to 'pugi::xml_document::xml_document()'

正如我在this link 中看到的,我在编译时必须使用pugixml.cpp。有人知道如何将pugixml.cpp 添加到 Qt 项目吗?

我正在使用,

Qt Creator 4.0.2 Based on Qt 5.7.0 (GCC 4.9.1 20140922(Red Hat 4.9.1-10), 63 bit)

【问题讨论】:

  • 由于您使用的是 Qt,它提供了许多使用 XML 的类,看看doc.qt.io/qt-5/xml-processing.html,您为什么要使用 3rd 方库?
  • @ManuelH 我认为 Qt xml 实现比其他 xml 实现要笨拙一些。

标签: c++ qt pugixml


【解决方案1】:

您可以通过编辑名为 pugiconfig.hpp 的文件并在此处取消注释该行来解决此问题:

// Uncomment this to switch to header-only version
//#define PUGIXML_HEADER_ONLY

改成:

// Uncomment this to switch to header-only version
#define PUGIXML_HEADER_ONLY

现在您不需要直接包含pugixml.cpp,标题将成为自包含

【讨论】:

  • 谢谢 - 非常有用。
【解决方案2】:

我相信这个错误是链接器错误。这意味着您添加了函数声明,但没有添加函数定义。

因此,下载 'pugixml' 并列出 QT 中的 pugixml.cpp 源文件。函数定义应该在这个 .cpp 文件中。

然后你的编译器就能找到函数的定义。

应该能解决问题。

【讨论】:

  • 是的,它奏效了。谢谢你的回答。我下载了“pugixml”源并构建了它。然后我将pugixml.cpp 文件复制到项目中。并将“pugixml”源放在/usr/include 文件夹中。我还将#include "pugixml.hpp" 的路径更改为#include "pugixml_1_7/src/pugixml.hpp",包括pugixml.hpp 文件位置(/usr/include/pugixml_1_7/src/pugixml.hpp)。现在它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多