使用 yaml-cpp 0.5 DLL 时的链接器错误

Posted

技术标签:

【中文标题】使用 yaml-cpp 0.5 DLL 时的链接器错误【英文标题】:Linker errors when using yaml-cpp 0.5 DLL 【发布时间】:2013-08-15 01:58:22 【问题描述】:

我在 Visual Studio 2010 中有一个 C++ 项目,我将代码从旧的 yaml-cpp 0.3 API 移植到新的 0.5 API。我已经设置了 Boost,使用 CMake 构建了新的 DLL,设置了包含和库路径,更新了所有代码以匹配新的 API,一切都可以正常编译。

但是,当它到达链接时,我遇到了像这样的大量链接器错误:

error LNK2001: unresolved external symbol "public: static bool __cdecl YAML::convert<bool>::decode(class YAML::Node const &,bool &)"
error LNK2001: unresolved external symbol "private: void __thiscall YAML::detail::node_data::insert_map_pair(class YAML::detail::node &,class YAML::detail::node &)"
error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::memory_holder::merge(class YAML::detail::memory_holder &)"
error LNK2001: unresolved external symbol "public: class YAML::detail::node & __thiscall YAML::detail::memory::create_node(void)"
error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::node_data::mark_defined(void)"
error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::node_data::set_null(void)"
...

看起来并非所有符号都被导出到 DLL,但我不知道如何修复它。我试过清理所有东西、重建、调试/发布、不同的 VS 版本等。使用 yaml-cpp 0.3 一切正常,但我真的想要新的 API。这些是我在 CMake 中用于构建库的设置:

APPLE_UNIVERSAL_BIN = false
BUILD_SHARED_LIBS = true
MSVC_SHARED_RT = true
MSVC_STHREADED_RT = false
YAML_CPP_BUILD_CONTRIB = false
YAML_CPP_BUILD_TOOLS = false

【问题讨论】:

【参考方案1】:

这是一个已知问题。您可以关注项目页面上的issue page。

【讨论】:

以上是关于使用 yaml-cpp 0.5 DLL 时的链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

CMake - 静态 yaml-cpp 作为 git 子模块的链接器错误

CMake - 链接器错误与静态yaml-cpp作为git子模块

yaml-cpp 以啥顺序返回数据?

使用 yaml-cpp 源代码创建 dll

使用 pybind11 包装 yaml-cpp 迭代器

尝试构建库时出现 yaml-cpp 编译器错误