提问人:Edge 提问时间:4/24/2015 最后编辑:CommunityEdge 更新时间:4/24/2015 访问量:982
VC++ 使用 gumbo-query 时出现问题(链接错误)
VC++ Problems using gumbo-query (linking error)
问:
我有一个 VC++ 项目,我正在尝试使用 gumbo-query 库的扩展,可在此处找到。这个库包装/扩展了 Google 的 gumbo-parser 在这里找到。以下是我采取的确切步骤 - 我对导入库不是很熟悉,所以我已经完成了使用 Boost 库的工作:
在 Visual Studio (VS Community 2013) 中,在项目设置 -> 配置属性 -> C/C++ -> 常规 下,我已将路径放入一个文件夹,该文件夹包含来自上面链接的两个项目的所有源文件。具体来说,我将两个项目的 src 文件夹中的 .c、.cpp 和 .h 文件放在一起,并在我的项目设置中将它们引用为包含目录。
在扩展 Google 的 gumbo-parser 的项目示例文件(可在此处找到)之后,我添加了以下两行来导入库:
#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 似乎认为包含很好,当我放入 CDocument d 时更是如此;它亮起表示它识别 CDocument 类型。
答:
和往常一样,很明显我做JS开发人员太久了。我真的需要编译一个 .lib 文件。感谢克里斯蒂安提醒我这一点。
Google 最初的 gumbo-parser 项目包括一个 VS 项目。我打开它并编译它,修复了所有项目设置问题,以便我可以将其导入到我的项目中,我通过我的 VS 项目的配置属性 -> 链接器 -> 输入 -> 其他依赖项设置。
接下来,我从包装库 gumbo-query 中添加了额外的源文件,其中我必须修复原始 gumbo-parser 项目中的 parser.h/parser.cpp 与包装库中的 Parser.h/Parser.cpp 文件之间的命名冲突。我还将所有引用更改为#include <gumbo.h>
#include "gumbo.h"
最终,我得到了一个包含原始库和包装库的 gumbo.lib 文件,并将其导入到我的项目中,我现在似乎能够成功使用这些函数。
评论