c++ 中的 yaml.cpp 库有问题
Posted
技术标签:
【中文标题】c++ 中的 yaml.cpp 库有问题【英文标题】:Having problems with yaml.cpp lib in c++ 【发布时间】:2013-03-29 02:13:26 【问题描述】:我很难在我的项目中使用 yaml-cpp 0.3.0 我下载了 yaml,并像 http://code.google.com/p/yaml-cpp/ 所说的那样使用 VS 9 2008 WIN 64 构建它。所以,我得到了 yaml-cpp.dll 和 yaml-cpp.lib 我在 VS 2010 express 上有一个 c++ 项目,我正在尝试链接库: 我转到项目属性 - c/c++ 通用和其他包含 yaml-cpp 头文件的目录。然后我转到链接器并添加到我的 lib 目录的路径,然后我转到链接器 - 输入并添加我的 .lib 文件,然后我转到 VC++ 目录并在库目录和参考目录中添加到我的 lib 目录的路径 然后我尝试构建这个简单的代码:
std::ifstream fin("test.yaml");
YAML::Parser parser(fin);
YAML::Node doc;
while(parser.GetNextDocument(doc))
//do nothing yet
我遇到了几个链接问题,如下所示:
error LNK2019: unresolved external symbol "public: __thiscall YAML::Node::Node(void)" (??0Node@YAML@@QAE@XZ) referenced in function "public: __thiscall Parser::Parser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Parser@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
error LNK2019: unresolved external symbol "public: __thiscall YAML::Parser::~Parser(void)" (??1Parser@YAML@@QAE@XZ) referenced in function "public: __thiscall Parser::Parser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Parser@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
谁能帮帮我?我在这里用头撞墙。
【问题讨论】:
【参考方案1】:正如你所说,你有一个来自 YAML 的 DLL,我假设你在使用 VS2008 构建时指定了 -DBUILD_SHARED_LIBS=ON
,所以你最终得到了一个 lib
用于动态链接(在运行时到 DLL)而不是静态链接链接(在编译时)。
如果以上正确,则可能是 VS2008 和 VS2010 之间的差异导致了问题。例如,see this post here。要快速查看是否是此原因,请在您的 VS2010 项目属性中,将 Platform Toolset
设置为 V90
并查看是否有帮助。
另外,请确保您为同一个 CPU 编译了两个项目 - 即都为 32 位或都为 64 位。
【讨论】:
是的,我使用了 -DBUILD_SHARED_LIBS=ON。我试图更改平台工具集,但没有修复它。无论如何,我曾尝试将库添加到 VS2008 项目中,但我遇到了同样的错误,所以我认为这不是问题 此外,我也曾尝试使用 -DBUILD_SHARED_LIBS=OFF 并得到相同的错误以上是关于c++ 中的 yaml.cpp 库有问题的主要内容,如果未能解决你的问题,请参考以下文章
有人知道使用 XCopy 部署 Visual C++ 库有啥问题吗?
如何在我的 CMakelists.txt 中链接 yaml-cpp?