鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    livox_ROS2_driver 安装编译中报错

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    雷达驱动 ros2 humble
    2
    2
    957
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      曼森的林佳树甜甜甜
      最后由 andrew_liumuran 编辑

      Ubuntu22.04
      ROS2Humble

      在安装livox雷达ROS2功能包时,编译报错:

      1. livox_ros2_driver 官方驱动

      2. livox_ros2_driver 针对ROS2Humble 修改后驱动

      在使用 2 时仍然报错:

      ** WARNING ** io features related to pcap will be disabled
      /usr/bin/ld: /usr/local/lib/liblivox_sdk_static.a(device_discovery.cpp.o): relocation R_X86_64_TPOFF32 against symbol `_ZGVZN6spdlog7details2os9thread_idEvE3tid' can not be used when making a shared object; recompile with -fPIC
      /usr/bin/ld: failed to set dynamic section sizes: bad value
      collect2: error: ld returned 1 exit status
      gmake[2]: *** [CMakeFiles/livox_ros2_driver.dir/build.make:508:liblivox_ros2_driver.so] 错误 1
      gmake[1]: *** [CMakeFiles/Makefile2:139:CMakeFiles/livox_ros2_driver.dir/all] 错误 2
      gmake: *** [Makefile:146:all] 错误 2
      ---
      Failed   <<< livox_ros2_driver [13.0s, exited with code 2]
      
      Summary: 2 packages finished [17.6s]
        1 package failed: livox_ros2_driver
        1 package had stderr output: livox_ros2_driver
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @andrew_liumuran
        最后由 编辑

        @andrew_liumuran 这个错误看和gcc有关系,你可能要按照提示,重新编译库:

        @andrew_liumuran 在 livox_ROS2_driver 安装编译中报错 中说:

        recompile with -fPIC

        并传递 -fPIC参数,该参数含义如下

        -fPIC 是 GCC 和 Clang 编译器的选项之一,表示编译生成的目标文件使用位置独立代码(Position Independent Code,PIC)格式。使用该选项可以使得生成的目标文件在被动态链接时更加灵活,也能够提高程序的安全性。

        PIC 格式的目标文件可以在内存中的任何位置加载和执行,而不必依赖于特定的地址。这意味着在将多个目标文件链接为一个可执行文件时,不必为每个目标文件指定特定的内存地址,也可以避免因为目标文件地址重叠而导致的链接错误。此外,使用 PIC 也可以提高程序的安全性,因为它使得攻击者更难利用内存布局信息来实现攻击。

        在使用 GCC 或 Clang 编译器时,如果需要生成使用 PIC 格式的目标文件,就需要加上 -fPIC 选项。通常在编译共享库(shared library)时需要使用该选项。在 Linux 系统中,使用 ldd 命令可以查看一个可执行文件或共享库所依赖的动态链接库,如果一个库使用了 -fPIC 选项编译,则会在输出中显示 PIC 字样。

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS