小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
3.4.4.5在功能抱中使用QT报错。
-
从你提供的错误信息和代码来看,这里有几个可能的问题和解决方案:
-
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 版本兼容。
-
符号查找错误:
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 版本或从源代码编译。
- 检查你的系统中是否有多个版本的
-
CMakeLists.txt 和构建配置:
- 确保你的
CMakeLists.txt
正确设置了 Qt5 的路径和组件。 - 检查你的构建环境是否正确设置了所有必要的路径和变量。
- 确保你的
-
其他注意事项:
- 确保你的 ROS2 环境正确设置,并且所有依赖都已正确安装。
- 检查你的
hello_qt.cpp
代码是否有语法错误(虽然你提供的代码看起来语法上是正确的,但注意你使用了 HTML 实体<
和>
而不是<
和>
)。
最后,如果问题仍然存在,尝试在一个新的、干净的 Ubuntu 22.04 环境中重新安装 ROS2 和 Qt,以排除任何特定于系统或配置的问题。
以上为生成回答,仅供参考~
-
-
@261962418 在命令前加上 QT_QPA_PLATFORM=xcb
-
@ganyuanzhen 在哪一条命令上加阿
-
@261962418 ros2 run status_display hello_qt 前面,
QT_QPA_PLATFORM=xcb ros2 run status_display hello_qt
-
@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 -
@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也一并卸载掉。
-
-
@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" -
@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里面执行的命令。
单独用系统的终端执行试一下呢,
-
@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 -
@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安装的软件,里面的环境配置比较特殊,所以会出一些问题
-
@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 -
@261962418 Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
这个问题,可以试着换一下GNOME Xorg会话。并不影响程序的运行和显示
-
网上也有这个办法
# 解决方法 rambo@test:~$ sudo nano /etc/gdm3/custom.conf WaylandEnable=false # 取消注释,即在当前图形化中不开启WaylandEn ablerambo@test:~$ sudo systemctl restart gdm3 # 重启服务
我用的是KDE桌面,不是GNOME,所以没遇到过这个报错~
-
@ganyuanzhen 好的,感谢大老的指教和方向,我寨SS,已经卡在这一天了