c++ - Catkin 构建在构建时失败。未定义对 YAML 错误的引用
问题描述
我在尝试构建项目时收到以下错误。
Errors << lifelong_learning:make /home/ekin/my_ws/logs/lifelong_learning/build.make.001.log
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::InvalidNode'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::begin()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::LoadAllFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::~Emitter()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `typeinfo for YAML::BadConversion'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::BadConversion::~BadConversion()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::PrepareNode(YAML::EmitterNodeType::value)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `typeinfo for YAML::BadSubscript'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::GetFloatPrecision() const'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::RepresentationException'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::StartedScalar()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::InvalidNode::~InvalidNode()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::ostream_wrapper::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::memory::create_node()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::size() const'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::BadSubscript'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::set_null()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::set_scalar(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::end()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::insert_map_pair(YAML::detail::node&, YAML::detail::node&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `typeinfo for YAML::InvalidNode'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::Emitter()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::convert_to_map(std::shared_ptr<YAML::detail::memory_holder>)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::Exception'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::BadConversion'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::empty_scalar[abi:cxx11]'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::memory_holder::merge(YAML::detail::memory_holder&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::good() const'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::c_str() const'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::BadSubscript::~BadSubscript()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::mark_defined()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/learning_node_segmentation.dir/build.make:468: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/lifelong_learning/learning_node_segmentation] Error 1
make[1]: *** [CMakeFiles/Makefile2:1422: CMakeFiles/learning_node_segmentation.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::InvalidNode'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::detail::node_data::begin()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::LoadAllFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `YAML::Emitter::~Emitter()'
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `typeinfo for YAML::BadConversion'
...
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/learning_node_update_locm.dir/build.make:467: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/lifelong_learning/learning_node_update_locm] Error 1
make[1]: *** [CMakeFiles/Makefile2:1530: CMakeFiles/learning_node_update_locm.dir/all] Error 2
/usr/bin/ld: /home/ekin/my_ws/devel/.private/lifelong_learning/lib/liblearninglib.so.0.0.1: undefined reference to `vtable for YAML::InvalidNode'
...
make: *** [Makefile:141: all] Error 2
我的 CMake 文件包括以下内容
#Yaml
find_package(yaml-cpp)
#Project Executables(Nodes)
add_executable(learning_node_diagnostics
src/learning_node_diagnostics.cpp
)
target_include_directories(learning_node_diagnostics PRIVATE include)
target_link_libraries(learning_node_diagnostics PUBLIC
learninglib
${PCL_LIBRARIES}
${catkin_LIBRARIES}
${OpenCV_LIBS}
${YAML_CPP_LIBRARIES}
)
...
而且我还尝试了以下作为我的 CMake 文件并得到了同样的错误
find_package(PkgConfig)
pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)
include_directories(${YAMLCPP_INCLUDE_DIRS})
add_executable(name src/name.cpp)
target_link_libraries(name ${catkin_LIBRARIES} ${YAMLCPP_LIBRARIES})
我也尝试过以下 CMake 文件
#Yaml
find_package(yaml-cpp REQUIRED)
target_link_libraries(name ${catkin_LIBRARIES} yaml-cpp)
它们似乎都不起作用,我知道该项目是在其他计算机中构建的,并且 yaml 似乎可以在我的计算机上使用 moveit api 正常工作。我已经尝试重新安装 ROS Noetic,但它仍然无法正常工作。这个时候我能做什么。我使用的是 Ubuntu 20.04,并且安装了 ROS Noetic 发行版。
解决方案
推荐阅读
- python - 在 DF 行上迭代打印输出
- ios - react-native 错误 RCTPushNotification 我需要成为苹果会员才能使用本地 PushNotificationiOS?
- sql-server - 如何创建 T-SQL 函数来读取已作为同一 [update] 事务的一部分更新的值
- ruby-on-rails - Rails 5.2:Bootstrap 4 选项卡面板未正确填充
- spring-boot - 在本地开发期间动态更新前端和后端之间的传输层(vue.js、axios 和 spring-boot)?
- android - 首次检测后停止移动视觉 api
- c# - 循环和操作 SQL 结果集的最快方法是什么?
- aws-sdk - 获取 AWS CodeCommit 中两个修订之间的提交列表
- delphi - Delphi 函数(或 Pascal)的默认返回值
- flutter - Flutter Web:堆栈和 Flare 问题