小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
第三章编译小鱼提供的hello_qt源码后,运行时报错
-
报错内容:/home/john/ros2bookcode/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
应用程序在运行时尝试查找一个未定义的符号__libc_pthread_init
,这个符号属于GLIBC_PRIVATE
版本,这通常意味着系统上的某些基本库(如 glibc 或 pthread 库)版本与应用程序或某些依赖库不兼容。以下是一些可能的解决步骤:
-
检查系统库版本:
确认你的系统上安装的 glibc 和其他相关库(如 libpthread)的版本。你可以使用ldd --version
来查看 glibc 的版本,使用ldconfig -p | grep pthread
来查看 pthread 库的版本和路径。 -
确认 ROS 2 环境:
确保你的 ROS 2 环境设置正确,特别是LD_LIBRARY_PATH
环境变量。这个变量决定了动态链接器在哪些目录下查找库文件。你可以通过echo $LD_LIBRARY_PATH
来查看当前设置。 -
检查 Snap 包:
由于错误中提到了/snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0
,这表明你的系统中可能有通过 Snap 安装的库版本与通过系统包管理器(如 apt)安装的库版本冲突。尝试禁用或移除 Snap 版本的库,或者确保应用程序使用正确的库版本。 -
重新编译和安装:
如果可能,尝试重新编译hello_qt
和它的所有依赖,确保所有组件都是使用当前系统的库版本编译的。 -
使用 Docker 或虚拟机:
如果问题持续存在,考虑在一个干净的 Docker 容器或虚拟机中安装 ROS 2 和相关代码,这可以避免很多与系统级库相关的问题。 -
查阅文档和社区:
查看 ROS 2 的官方文档和社区论坛,看看是否有其他人遇到并解决了类似的问题。 -
调试和符号追踪:
使用strace
或gdb
等工具来进一步跟踪和调试应用程序的启动过程,这可能有助于确定是哪一个库或哪一个操作导致了问题。
通过上述步骤,你应该能够更接近问题的根源,并找到一个合适的解决方案。如果问题依然存在,可能需要更详细地检查应用程序的依赖关系和系统配置。
以上为生成回答,仅供参考~
-