CMake - 链接器错误与静态yaml-cpp作为git子模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake - 链接器错误与静态yaml-cpp作为git子模块相关的知识,希望对你有一定的参考价值。
我想在我的项目中使用yaml-cpp。我正在使用cmake来构建我的项目和yaml-cpp,这是我项目中的一个git子模块。
我的计算机上有boost库(yaml-cpp需要)。
我正静静地建造它。在我的主CMakeLists.txt中使用add_subdirectory
然后使用target_link_libraries(components yaml-cpp)
(组件是我在我的项目的不同模块上使用的静态库)。
我在其中一个源文件的链接阶段出错:
CMakeFiles/rsa-packer.dir/options/addObject.cpp.o : In function « YAML::detail::node& YAML::detail::node_data::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::shared_ptr<YAML::detail::memory_holder>) » :
~/git/apps/rsa-packer/options/addObject.cpp:(.text._ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE[_ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE]+0x157) : undefined reference to: « YAML::detail::node_data::convert_to_map(boost::shared_ptr<YAML::detail::memory_holder>) »
我检查了make输出,有-lyaml-cpp选项。我检查了libyaml-cpp.a文件,它包含了这个函数(但我真的不明白nm的输出:
000000000000005d r .L__PRETTY_FUNCTION__._ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE
0000000000000940 T _ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE
奇怪的是:
// this works
YAML::Node node = YAML::Load(manifest.getStream());
// this does not work
if(node["objects"]) {
std::cout << "no objects" << std::endl;
}
我可以使用YAML::Load
函数构建节点对象,该函数可以在静态库中找到。
但是我不能调用node["..."]
,因为在lib中找不到该函数。
我不知道是什么导致了这个错误。
我不知道它是否会导致问题,但我在C ++ 14中编译我的项目,而yaml-cpp lib是使用c ++ 11构建的。
谢谢!
好的,我累了......
mongodb已经在我的电脑上安装了yaml-cpp。我使用mongodb的头文件和我刚从源代码编译的静态库...头文件用boost::shared_ptr
调用函数,我的库用std::shared_ptr
实现
以上是关于CMake - 链接器错误与静态yaml-cpp作为git子模块的主要内容,如果未能解决你的问题,请参考以下文章
未定义的参考链接 yaml-cpp 程序与 mingw-w64 + cmake