VC++使用gumbo查询时出现问题(链接错误)

VC++ Problems using gumbo-query (linking error)

本文关键字:问题 链接 错误 使用 gumbo 查询 VC++      更新时间:2023-10-16

我有一个VC++项目,我正在尝试使用gumbo查询库的扩展,可以在这里找到。这个库包装/扩展了谷歌的gumbo解析器。以下是我所采取的确切步骤-我不太熟悉导入库,所以我已经做了使用Boost库的操作:

在Visual Studio(VS Community 2013)中,在"项目设置"->"配置属性"->"C/C++"->"常规"下,我放置了一个文件夹的路径,该文件夹包含上面链接的两个项目的所有源文件。具体来说,我放置了这两个项目的src文件夹中的.c、.cpp和.h文件,并将它们作为包含目录在我的项目设置中引用。

根据扩展Google的gumbo解析器的项目的示例文件(在这里找到),我添加了以下两行来导入库:

#include "Document.h"
#include "Node.h"

在这一点上,我的解决方案编译得很好。但是,继续遵循示例文件,添加第一个变量声明:

CDocument d;

导致链接器错误,如下所示:

1>Main.obj : error LNK2028: unresolved token (0A0003B7) "public: __thiscall CDocument::CDocument(void)" (??0CDocument@@$$FQAE@XZ) referenced in function "private: void __clrcall MyApplication::Main::worker_DoWork(class System::Object ^,class System::ComponentModel::DoWorkEventArgs ^)" (?worker_DoWork@Main@MyApplication@@$$FA$AAMXP$AAVObject@System@@P$AAVDoWorkEventArgs@ComponentModel@4@@Z)
1>Main.obj : error LNK2028: unresolved token (0A0003B8) "public: virtual __thiscall CDocument::~CDocument(void)" (??1CDocument@@$$FUAE@XZ) referenced in function "private: void __clrcall MyApplication::Main::worker_DoWork(class System::Object ^,class System::ComponentModel::DoWorkEventArgs ^)" (?worker_DoWork@Main@MyApplication@@$$FA$AAMXP$AAVObject@System@@P$AAVDoWorkEventArgs@ComponentModel@4@@Z)
1>Main.obj : error LNK2019: unresolved external symbol "public: __thiscall CDocument::CDocument(void)" (??0CDocument@@$$FQAE@XZ) referenced in function "private: void __clrcall MyApplication::Main::worker_DoWork(class System::Object ^,class System::ComponentModel::DoWorkEventArgs ^)" (?worker_DoWork@Main@MyApplication@@$$FA$AAMXP$AAVObject@System@@P$AAVDoWorkEventArgs@ComponentModel@4@@Z)
1>Main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CDocument::~CDocument(void)" (??1CDocument@@$$FUAE@XZ) referenced in function "private: void __clrcall MyApplication::Main::worker_DoWork(class System::Object ^,class System::ComponentModel::DoWorkEventArgs ^)" (?worker_DoWork@Main@MyApplication@@$$FA$AAMXP$AAVObject@System@@P$AAVDoWorkEventArgs@ComponentModel@4@@Z)
1>..{omitted}..MyApplication.exe : fatal error LNK1120: 4 unresolved externals

无论我将CDocument实例化放在哪里,都会出现此错误。

我能做些什么来纠正这种情况?VS似乎认为includes很好,当我放入CDocument d时,它会更好些;它亮起表示它识别CDocument类型。

和往常一样,很明显我做JS开发人员的时间太长了。我确实需要编译一个.lib文件。感谢克里斯蒂安提醒我这一点。

谷歌最初的口香糖解析器项目包括一个VS项目。我打开并编译了它,修复了所有项目设置问题,这样我就可以将它导入到我的项目中,这是我通过VS项目的配置属性->链接器->输入->附加依赖项设置完成的。

接下来,我从包装库gumbo查询中添加了额外的源文件,在那里我必须修复原始gumbo解析器项目中的parser.h/parse.cpp和包装库中的parser.h/parser.cpp文件之间的命名冲突。我还将所有对#include <gumbo.h>的引用更改为#include "gumbo.h"

最终,我得到了一个包含原始库和包装库的gumbo.lib文件,并将其导入到我的项目中,我现在似乎能够成功地使用这些函数。