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

    B站ros2教程3.4.4运行时出现问题

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 linux ros2 qt出错
    3
    6
    308
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      admin_
      最后由 编辑

      《ROS 2机器人开发从入门到实践》书籍配套视频,对应章节3.4.4在功能包中使用QT。社区地址:fishros.org.cn

      运行时报以下错误:

      wd@ubuntu22:~/cpp_proj/241224/topic_practice_workspace$ ros2 run stat
      us_display hello_qt 
      /home/wd/cpp_proj/241224/topic_practice_workspace/install/status_display/lib/status_display/hello_qt: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
      [ros2run]: Process exited with failure 127
      

      hello.qt.cpp

      #include <QApplication>
      #include <QLabel>
      #include <QString>
      
      int main(int argc, char **argv) {
          QApplication app(argc, argv);
          QLabel *label = new QLabel();
          QString msg = QString::fromStdString("Hello Qt!\nFROM ROS2");
          label->setText(msg);
          label->show();
          app.exec();
      
          return 0;
      }
      

      CMakeLists.txt

      cmake_minimum_required(VERSION 3.8)
      project(status_display)
      
      if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        add_compile_options(-Wall -Wextra -Wpedantic)
      endif()
      
      # find dependencies
      find_package(ament_cmake REQUIRED)
      find_package(rclcpp REQUIRED)
      find_package(status_interfaces REQUIRED)
      find_package(Qt5 REQUIRED COMPONENTS Widgets)
      
      add_executable(hello_qt src/hello_qt.cpp)
      target_link_libraries(hello_qt Qt5::Widgets)
      
      if(BUILD_TESTING)
        find_package(ament_lint_auto REQUIRED)
        # the following line skips the linter which checks for copyrights
        # comment the line when a copyright and license is added to all source files
        set(ament_cmake_copyright_FOUND TRUE)
        # the following line skips cpplint (only works in a git repo)
        # comment the line when this package is in a git repo and when
        # a copyright and license is added to all source files
        set(ament_cmake_cpplint_FOUND TRUE)
        ament_lint_auto_find_test_dependencies()
      endif()
      
      install(TARGETS hello_qt
      DESTINATION lib/${PROJECT_NAME}
      )
      
      ament_package()
      
      

      package.xml

      <?xml version="1.0"?>
      <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
      <package format="3">
        <name>status_display</name>
        <version>0.0.0</version>
        <description>TODO: Package description</description>
        <maintainer email="wd@todo.todo">wd</maintainer>
        <license>Apache-2.0</license>
      
        <buildtool_depend>ament_cmake</buildtool_depend>
      
        <depend>rclcpp</depend>
        <depend>status_interfaces</depend>
      
        <test_depend>ament_lint_auto</test_depend>
        <test_depend>ament_lint_common</test_depend>
      
        <export>
          <build_type>ament_cmake</build_type>
        </export>
      </package>
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        您遇到的错误提示表明在运行时链接到了错误的 libpthread.so.0 库,这通常是由于环境变量设置不当或系统库配置问题导致的。错误消息中提到的 __libc_pthread_init, version GLIBC_PRIVATE 未定义,通常与系统的 glibc 库版本或链接到的 pthread 库版本不匹配有关。

        以下是一些可能的解决步骤:

        1. 检查系统库:

          • 确保您的系统上的 glibc 库是最新的,或者至少是与 ROS 2 兼容的版本。
          • 使用 ldd --version 和 ldconfig -p | grep libpthread 来检查已安装的 pthread 库版本。
        2. 检查环境变量:

          • 确保 LD_LIBRARY_PATH 环境变量没有包含指向错误库版本的路径。您可以通过运行 echo $LD_LIBRARY_PATH 来查看当前的设置。
          • 如果 LD_LIBRARY_PATH 包含了不应该的路径,尝试移除或更正这些路径。
        3. 重新构建项目:

          • 清理并重新构建您的 ROS 2 工作空间。使用以下命令:
            cd ~/cpp_proj/241224/topic_practice_workspace
            colcon build --packages-up-to status_display --clean
            
        4. 检查 Qt5 的安装:

          • 确保 Qt5 是通过官方渠道安装,并且版本与您的 ROS 2 版本兼容。
          • 如果您是使用 snap 安装了 Qt 或其他相关软件,可能会遇到库版本冲突的问题。考虑使用系统的包管理器(如 apt)来安装 Qt。
        5. 使用 strace 跟踪库加载:

          • 使用 strace 工具来跟踪运行时库加载的情况,这可以帮助识别是哪一个库被错误地加载。运行:
            strace -e trace=openat ros2 run status_display hello_qt
            
          • 查看输出中是否有任何异常的库加载行为。
        6. 检查 snap 包:

          • 由于错误中提到了 /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0,这可能是因为系统中安装了 snap 包,并且这些包与系统的原生库产生了冲突。考虑移除或更新这些 snap 包。

        如果上述步骤仍然无法解决问题,您可能需要更详细地检查系统的库配置,或者考虑在不同的系统或虚拟机环境中重新设置 ROS 2 和您的项目。希望这些步骤能帮助您解决问题!


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

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

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @admin_
          最后由 编辑

          @admin_

          1. 是在VSCODE中运行的吗
          2. VSCODE是怎么安装的
          3. 在系统终端下运行是否正常

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

          A 1 条回复 最后回复 回复 引用 0
          • A
            admin_ @小鱼
            最后由 编辑

            @小鱼
            1.是在vscode运行的;
            2.vscode在ubuntu的应用商店安装的;
            3.我试了下,在linux终端下是可以正常运行的。

            鱼总,这个是为啥呀

            小鱼小 1 条回复 最后回复 回复 引用 1
            • 小鱼小
              小鱼 技术大佬 @admin_
              最后由 编辑

              @admin_ 因为应用上电安装的vscode应该是在snap沙箱中运行的,读取不到系统的某些库

              建议直接用一键安装/从VSCODE官方直接下载安装即可

              参考:
              https://fishros.org.cn/forum/topic/3379/第三章编译小鱼提供的hello_qt源码后-运行时报错/5
              https://fishros.org.cn/forum/topic/3326/4-3节-c-服务通信
              https://fishros.org.cn/forum/topic/3220/3-4-4-5在功能抱中使用qt报错

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

              A 1 条回复 最后回复 回复 引用 0
              • A
                admin_ @小鱼
                最后由 编辑

                @小鱼 收到,大佬!

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