[更新]ROS2使用pcl时编译(colcon build)错误:undefined reference to `LZ4_resetStreamHC‘

系统环境

  • ubuntu 22.04
  • pcl 1.12.1
  • flann 1.9.2
  • ros2 humble

1 报错

引用kdtree/flann.h的时候容易出现这个问题,报错内容如下:
1)undefined reference to LZ4_resetStreamHC
2)undefined reference to LZ4_compress_HC_continue
3)undefined reference to LZ4_decompress_safe
4)undefined reference to LZ4_setStreamDecode
在这里插入图片描述

2 解决办法

强调:如果已经成功安装pcl,只是执行ros2 编译代码命令colcon build报错,看步骤2.4

--------------------------------------------2023.12.16更新--------------------------------------------------------
更新原因:在[步骤2.4]中CMakeLists.txt文件中的ament_target_dependencies添加了PUBLIC , 这是从ROS 1 移植代码时复制过来的,并不知道什么意思,同时会导致错误:vtkSmartPointer.h: 没有那个文件或目录。 因此删除掉PUBLIC,不需要添加[步骤2.4]的内容,也可以解决报错。

#删除前
ament_target_dependencies(random_forest
	PUBLIC
    pcl_conversions
    geometry_msgs
    nav_msgs
    sensor_msgs
    rclcpp
    std_msgs
    PCL
)
#删除后
ament_target_dependencies(random_forest
    pcl_conversions
    geometry_msgs
    nav_msgs
    sensor_msgs
    rclcpp
    std_msgs
    PCL
)

2.1 通过源码安装PCL [1]

如果已经是源码安装,则跳过。(本人通过命令sudo apt-get installl libpcl-dev安装pcl,则没有相应的link.txt文件)。我下载的pcl 1.12.1版本(ubuntu22.04),下载链接https://github.com/PointCloudLibrary/pcl。按照安装步骤,执行:

cd pcl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr\
      -DCMAKE_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON \
      -DCMAKE_INSTALL_PREFIX=/usr ..

(这里没有执行安装命令:makesudo make install)

2.2 修改link.txt

找到/pcl/build/kdtree/CMakeFiles/pcl_kdtree.dir/link.txt文件,在打开后txt文件末尾写上:-llz4,参考 这里。(备注:实际上我的txt文件末尾已经自带 -llz4,因此最终通过步骤2.4解决)

此外,通过命令找到liblz4.so路径

sudo find / -name liblz4.so

参照 方法 ,将 /usr/lib/x86_64-linux-gnu/liblz4.so也加入link.txt文件
在这里插入图片描述

2.3 最终在终端上运行:

make
sudo make install

2.4 添加liblz4.so依赖(针对ros2编译,很重要)

如果执行玩步骤2.1~2.3以后,仍然报错,解决方式如下:在 工作空间/src/包名/CMakeLists.txt 文件里面添加如下代码:

find_library(LZ4_LIBRARIES NAMES liblz4.so HINTS "lz4/lib")
link_libraries(${LZ4_LIBRARIES})
add_definitions(${LZ4_DEFINITIONS}) 

参考这里方法截图
在这里插入图片描述

3 其他方法(无效/无法确认/不懂怎么修改)

(1) 修改flann 的CMakeLists.txt文件,并重新编译,链接1;
(2) 修改flann 的CMakeLists.txt文件,并重新编译,链接2
在这里插入图片描述

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据你提供的引用内容,你可能遇到了使用OpenCV编译的一些错误。具体来说,你可能遇到了以下几种错误: 1. "fatal error: boostdesc_bgm.i: No such file or directory" 错误通常是由于缺少依赖文件引起的。你可以检查一下你的编译环境和编译参考是否正确。 2. "undefined reference to `google::base::CheckOpMessageBuilder::CheckOpMessageBuilder(char const*)'" 错误通常是由于缺少对应的库文件引起的。你可以尝试在CMakeLists.txt中添加对应的库文件路径来解决这个问题。 3. "undefined reference to `msd_init' collect2.exe: error: ld returned 1 exit status" 错误提示了一个未定义的函数msd_init。这种错误通常是由于缺少对应的函数定义或链接库引起的。你可以尝试检查一下你的代码中是否缺少了对msd_init函数的定义,或者是否需要链接对应的库文件来解决这个问题。 综上所述,你可以根据具体的错误提示进行相应的调查和解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [fatal error: boostdesc_bgm.i: No such file or directory](https://blog.csdn.net/curious_undergather/article/details/111639199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [ROS编译报错“undefined reference to ‘xxx‘”的原因总结](https://blog.csdn.net/The_Dream_Runner/article/details/122668418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值