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

    3.4.4.5在功能抱中使用QT报错。

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    ros2 qt 报错
    3
    16
    720
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      261962418
      最后由 编辑

      系统不是虚拟机,主机ubnutu22.04,按照教程抄写代码报出一下错误:
      wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ source install/setup.bash
      wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ ros2 run status_display hello_qt
      qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
      /home/wan/chapt3/topic_practice_ws/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 message = QString::fromStdString("hello Qt!");
          label->setText(message);
          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()
      
      

      c_cpp_properties.json代码如下:

      {
          "configurations": [
              {
                  "name": "Linux",
                  "includePath": [
                      "${workspaceFolder}/**",
                      "/opt/ros/humble/include/**"
                  ],
                  "defines": [],
                  "compilerPath": "/usr/bin/gcc",
                  "cStandard": "c17",
                  "cppStandard": "gnu++17",
                  "intelliSenseMode": "linux-gcc-x64"
              }
          ],
          "version": 4
      }               
                  // /usr/include/x86_64-linux-gnu/qt5/QtCore
      
      ganyuanzhenG 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的错误信息和代码来看,这里有几个可能的问题和解决方案:

        1. Qt 平台插件错误:

          qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
          

          这个错误表明 Qt 运行时无法找到名为 "wayland" 的平台插件。这通常是因为 Qt 的配置或安装问题。Ubuntu 22.04 默认使用 Wayland 显示服务器,而 Qt 应用程序需要找到相应的插件来与 Wayland 通信。

          解决方案:

          • 确保 Qt 安装完整,特别是包含所有必要的插件。
          • 你可以尝试设置环境变量 QT_QPA_PLATFORM_PLUGIN_PATH 指向包含 wayland 插件的目录。例如,如果 Qt 安装在 /opt/Qt,你可以尝试:
            export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt/plugins/platforms
            
          • 另外,确保你的 Qt 版本与你的 Ubuntu 版本兼容。
        2. 符号查找错误:

          symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
          

          这个错误表明你的应用程序在尝试使用 libpthread.so.0 时遇到了问题,特别是与 GLIBC 的私有版本相关的符号。这通常与库版本冲突或错误的库链接有关。

          解决方案:

          • 检查你的系统中是否有多个版本的 libpthread 或其他相关库,并确保 ROS2 和 Qt 链接到正确的版本。
          • 尝试更新你的系统和所有相关的库到最新版本。
          • 如果你使用的是 Snap 安装的 ROS2 或其他软件,可能会遇到与原生系统库不兼容的问题。考虑使用非 Snap 版本或从源代码编译。
        3. CMakeLists.txt 和构建配置:

          • 确保你的 CMakeLists.txt 正确设置了 Qt5 的路径和组件。
          • 检查你的构建环境是否正确设置了所有必要的路径和变量。
        4. 其他注意事项:

          • 确保你的 ROS2 环境正确设置,并且所有依赖都已正确安装。
          • 检查你的 hello_qt.cpp 代码是否有语法错误(虽然你提供的代码看起来语法上是正确的,但注意你使用了 HTML 实体 &lt; 和 &gt; 而不是 < 和 >)。

        最后,如果问题仍然存在,尝试在一个新的、干净的 Ubuntu 22.04 环境中重新安装 ROS2 和 Qt,以排除任何特定于系统或配置的问题。


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

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

        1 条回复 最后回复 回复 引用 0
        • ganyuanzhenG
          Elysia 技术大佬 @261962418
          最后由 编辑

          @261962418 在命令前加上 QT_QPA_PLATFORM=xcb

          我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

          2 1 条回复 最后回复 回复 引用 0
          • 2
            261962418 @ganyuanzhen
            最后由 编辑

            @ganyuanzhen 在哪一条命令上加阿

            ganyuanzhenG 1 条回复 最后回复 回复 引用 0
            • ganyuanzhenG
              Elysia 技术大佬 @261962418
              最后由 编辑

              @261962418 ros2 run status_display hello_qt 前面,

              QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
              

              我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

              2 1 条回复 最后回复 回复 引用 0
              • 2
                261962418 @ganyuanzhen
                最后由 编辑

                @ganyuanzhen 还是一样
                wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                /home/wan/chapt3/topic_practice_ws/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

                ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                • ganyuanzhenG
                  Elysia 技术大佬 @261962418
                  最后由 编辑

                  @261962418 在 3.4.4.5在功能抱中使用QT报错。 中说:

                  /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE

                  看起来你的系统环境设置有些问题,按理说不应该识别到snap里面的运行库。看看是不是 ld.so.conf 或者LD_LIBRARY_PATH有问题。

                  或者可以卸载掉snap,不过这个会导致firefox也一并卸载掉。

                  我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                  ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                  • ganyuanzhenG
                    Elysia 技术大佬 @ganyuanzhen
                    最后由 ganyuanzhen 编辑

                    @ganyuanzhen

                    unset GTK_PATH
                    unset GIO_MODULE_DIR

                    执行这个以后再看看呢()

                    我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                    2 1 条回复 最后回复 回复 引用 0
                    • 2
                      261962418 @ganyuanzhen
                      最后由 编辑

                      @ganyuanzhen
                      wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ unset GTK_PATH
                      unset GIO_MODULE_DIR
                      wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                      Gtk-Message: 23:45:22.302: Failed to load module "canberra-gtk-module"
                      Gtk-Message: 23:45:22.302: Failed to load module "canberra-gtk-module"

                      ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                      • ganyuanzhenG
                        Elysia 技术大佬 @261962418
                        最后由 编辑

                        @261962418 在 3.4.4.5在功能抱中使用QT报错。 中说:

                        @ganyuanzhen
                        wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ unset GTK_PATH
                        unset GIO_MODULE_DIR
                        wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                        Gtk-Message: 23:45:22.302: Failed to load module "canberra-gtk-module"
                        Gtk-Message: 23:45:22.302: Failed to load module "canberra-gtk-module"

                        是不是在snap安装的vscode里面执行的命令。

                        单独用系统的终端执行试一下呢,

                        我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                        2 1 条回复 最后回复 回复 引用 0
                        • 2
                          261962418 @ganyuanzhen
                          最后由 编辑

                          @ganyuanzhen 系统中端是这样的
                          wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ unset GTK_PATH
                          unset GIO_MODULE_DIR
                          wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                          Package 'status_display' not found

                          ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                          • ganyuanzhenG
                            Elysia 技术大佬 @261962418
                            最后由 编辑

                            @261962418 在 3.4.4.5在功能抱中使用QT报错。 中说:

                            @ganyuanzhen 系统中端是这样的
                            wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ unset GTK_PATH
                            unset GIO_MODULE_DIR
                            wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                            Package 'status_display' not found

                            一样source一下你工作空间下的setup文件,然后执行 QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt

                            原理上不会有问题,snap安装的软件,里面的环境配置比较特殊,所以会出一些问题

                            我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                            2 1 条回复 最后回复 回复 引用 0
                            • 2
                              261962418 @ganyuanzhen
                              最后由 编辑

                              @ganyuanzhen 系统中端是这样的
                              wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ source install/setup.bash
                              wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                              Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

                              vscode是这样的

                              wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ source install/setup.bash
                              wan@wan-ThinkPad-X1-Yoga-3rd:~/chapt3/topic_practice_ws$ QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
                              Gtk-Message: 23:55:43.056: Failed to load module "canberra-gtk-module"
                              Gtk-Message: 23:55:43.057: Failed to load module "canberra-gtk-module"
                              ^C[ros2run]: Interrupt

                              ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                              • ganyuanzhenG
                                Elysia 技术大佬 @261962418
                                最后由 编辑

                                @261962418 Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

                                这个问题,可以试着换一下GNOME Xorg会话。并不影响程序的运行和显示

                                我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                                ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                                • ganyuanzhenG
                                  Elysia 技术大佬 @ganyuanzhen
                                  最后由 编辑

                                  @ganyuanzhen

                                  网上也有这个办法

                                  
                                  
                                  # 解决方法
                                  rambo@test:~$ sudo nano /etc/gdm3/custom.conf
                                  WaylandEnable=false # 取消注释,即在当前图形化中不开启WaylandEn
                                  ablerambo@test:~$ sudo systemctl restart gdm3 # 重启服务
                                  
                                  

                                  我用的是KDE桌面,不是GNOME,所以没遇到过这个报错~

                                  我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                                  2 1 条回复 最后回复 回复 引用 0
                                  • 2
                                    261962418 @ganyuanzhen
                                    最后由 编辑

                                    @ganyuanzhen 好的,感谢大老的指教和方向,我寨SS,已经卡在这一天了☂

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