编译报错: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)‘

写在前面

自己在写一个调用 pcl 的程序,编译的时候遇到如下问题:

In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::x>()':
undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'

一、问题描述

CMakeFiles/localization_quality_evaluation_node.dir/src/localization_quality_evaluation.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::x>()':
localization_quality_evaluation.cpp:(.text._ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1xEEEvv[_ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1xEEEvv]+0x2a2): undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
CMakeFiles/localization_quality_evaluation_node.dir/src/localization_quality_evaluation.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::y>()':
localization_quality_evaluation.cpp:(.text._ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1yEEEvv[_ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1yEEEvv]+0x2a2): undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
CMakeFiles/localization_quality_evaluation_node.dir/src/localization_quality_evaluation.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::z>()':
localization_quality_evaluation.cpp:(.text._ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1zEEEvv[_ZN3pcl6detail11FieldMapperINS_8PointXYZEEclINS_6fields1zEEEvv]+0x2a2): undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
collect2: error: ld returned 1 exit status
ros_tools/localization_quality_evaluation/CMakeFiles/localization_quality_evaluation_node.dir/build.make:146: recipe for target '/home/wang/catkin_ws/devel/lib/localization_quality_evaluation/localization_quality_evaluation_node' failed
make[2]: *** [/home/wang/catkin_ws/devel/lib/localization_quality_evaluation/localization_quality_evaluation_node] Error 1
CMakeFiles/Makefile2:471: recipe for target 'ros_tools/localization_quality_evaluation/CMakeFiles/localization_quality_evaluation_node.dir/all' failed
make[1]: *** [ros_tools/localization_quality_evaluation/CMakeFiles/localization_quality_evaluation_node.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

localization_quality_evaluation

二、解决方法

像这种问题,cpp 程序内部没有报错,在 xxx.ccp.o 中报错,那么一般都是库的问题。
我这里主要的问题是CMakeLists.txt 中 对于 pcl 库的链接不太对,所以才会出现这样的问题。
我自己的解决方法:
原本的 CMakeLists.txt 内容

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
  ${PROJECT_NAME}
)

修改为:

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
  ${PROJECT_NAME}
  ${PCL_LIBRARIES}
)

版权声明:本文为qq_39779233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。