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

    FASTDDS例程make出错

    已定时 已固定 已锁定 已移动
    动手学ROS2
    ros2 ros2 foxy fastdds
    2
    2
    343
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 6
      635676905
      最后由 编辑

      背景:

      在动手学ROS2教学:使用DDS进行订阅发布这一章里,跑
      hellofish例程在make时出错

      问题描述:

      按照教学的顺序顺利跑到了下面这步,在最后一条指令make时出错:
      cd dds_tutorial/examples/01-hellofishros
      mkdir build && cd build
      cmake ..
      make

      报错信息:
      /usr/bin/ld: warning: libfastcdr.so.1, needed by /opt/ros/foxy/lib/libfastrtps.so.2.1.4, may conflict with libfastcdr.so.2
      /usr/bin/ld: CMakeFiles/DDSHelloFishRosPublisher.dir/src/idl_generate/HelloFishRos.cxx.o: undefined reference to symbol '_ZN8eprosima7fastcdr3Cdr10readStringERj'
      /usr/bin/ld: /opt/ros/foxy/lib/libfastcdr.so.1: error adding symbols: DSO missing from command line
      collect2: error: ld returned 1 exit status
      make[2]: *** [CMakeFiles/DDSHelloFishRosPublisher.dir/build.make:139:DDSHelloFishRosPublisher] 错误 1
      make[1]: *** [CMakeFiles/Makefile2:90:CMakeFiles/DDSHelloFishRosPublisher.dir/all] 错误 2
      make: *** [Makefile:91:all] 错误 2

      具体细节和上下文:

      ros2用的是ubuntu20.0.4的foxy版本,shell用的是zsh,在前面各章执行命令时已经替换了ros2版本号和bashrc->zshrc,没有出过大问题,有小错误都顺利解决了,顺利安装了fastdds,到这一步出错无法解决

      上一步给出的:
      echo 'source xxx/fastdds_ws/install/setup.bash' >> ~/.bashrc
      echo 'export PATH=$PATH:xxx/fastdds_ws/gradle-6.4/bin/' >> ~/.bashrc
      echo 'export DDSGEN=xxx/fastdds_ws/src/fastddsgen/scripts' >> ~/.bashrc
      已经改成了(xxx已替换为具体路径):
      echo 'source xxx/fastdds_ws/install/setup.zsh' >> ~/.zshrc
      echo 'export PATH=$PATH:xxx/fastdds_ws/gradle-6.4/bin/' >> ~/.zshrc
      echo 'export DDSGEN=xxx/fastdds_ws/src/fastddsgen/scripts' >> ~/.zshrc

      尝试过的解决方法:

      看出来是libfastcdr的版本冲突问题,但已经是github的最新版本2.0.0,找不到其他版本,不知道怎么解决

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的错误信息来看,问题主要出在链接器(ld)在尝试链接你的DDS应用时,遇到了libfastcdr库的版本冲突。具体来说,ROS 2 Foxy 使用的 libfastrtps 依赖于 libfastcdr.so.1,但你的系统中可能同时安装了 libfastcdr.so.2,这导致了版本冲突。

        这里有几个可能的解决方案:

        1. 确保环境变量设置正确

        首先,确保你的环境变量(如LD_LIBRARY_PATH)没有错误地包含指向 libfastcdr.so.2 的路径。你可以通过打印 LD_LIBRARY_PATH 来检查:

        echo $LD_LIBRARY_PATH
        

        如果其中包含了指向 libfastcdr.so.2 的路径,你可能需要调整或清除这个环境变量。

        2. 使用ldconfig管理库文件

        如果可能,使用 ldconfig 来管理你的库文件。这可以确保链接器在链接时找到正确的库版本。你可以通过编辑 /etc/ld.so.conf 文件或 /etc/ld.so.conf.d/ 目录下的文件来添加库路径,然后运行 sudo ldconfig。

        3. 显式指定链接器选项

        在 CMakeLists.txt 文件中,你可以显式地指定链接器应该使用哪个版本的 libfastcdr。这可以通过设置 target_link_libraries 时指定库的完整路径来实现。例如:

        target_link_libraries(your_target_name /path/to/libfastcdr.so.1)
        

        但请注意,这通常不是推荐的做法,因为它会使你的项目依赖于特定的库文件路径。

        4. 卸载或重新编译冲突的库

        如果可能,尝试卸载 libfastcdr.so.2 或重新编译你的DDS库以使用与ROS 2兼容的版本。这可能需要你查看DDS库的文档或源代码,以了解如何指定编译时使用的库版本。

        5. 检查ROS 2和DDS的兼容性

        确保你使用的DDS库与ROS 2 Foxy版本兼容。有时候,新版本的库可能不完全兼容旧版本的ROS 2。

        6. 清理并重新构建

        在尝试上述任何解决方案之前,最好先清理你的构建目录(删除 build 文件夹并重新创建它),然后再次运行 cmake 和 make。

        7. 寻求社区帮助

        如果上述方法都不能解决问题,你可以考虑在ROS 2或DDS的社区论坛、GitHub仓库或Stack Overflow等平台上寻求帮助。

        希望这些建议能帮助你解决问题!


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

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