在尝试调试与缺少名为 libdthread.so.1 的库相关的 Ubuntu Linux 系统崩溃时,我在 lib 文件夹中添加了一个同名的 so 文件。我现在明白这是个坏主意,因为我的机器现在无法使用了。现在,我输入任何命令,例如 ls,我都会得到:
ls:符号查找错误:/lib/libdthread.so.1:未定义符号:__data_start
我无法删除有问题的文件,因为 rm 或 unlink 命令(如上面的“ls”命令)不起作用。除了重新安装系统外,我还能做些什么来摆脱这种情况?
答案1
启动一个工作实例,安装损坏的文件系统并进行修复。例如在重新启动时启动救援模式,或从安装媒体启动。或者,将磁盘移动到其他工作实例(如果是虚拟机或其他共享存储)。
通常,系统软件的修复可能意味着apt reinstall
您正在使用的存储库中的软件包。但是,快速搜索https://packages.ubuntu.com在最近的版本中基本上找不到任何有关 libdthread.so.1 的信息。这个信息来自哪里?ls 是如何链接到它的?
或者,如果您有操作系统的备份,请恢复它们。
是的,重新安装系统是一个总能让你获得一个正常系统的选项。安装磁盘后,请将数据备份到其他地方。这样,如果需要全新安装,就不会丢失任何数据。
理解程序崩溃通常需要获取正在使用的库的确切版本的人类可读符号。
不幸的是,程序核心转储日志和分析程序在不同的 Linux 发行版之间有所不同。Ubuntu 维基页面给出安装调试符号和指向的示例apport-retrace
。最近的 Ubuntu 版本有调试信息索引,因此 gdb 会话可以根据需要从远程服务下载符号。
当然,如果该代码不是来自 Ubuntu,您将需要在其他地方获取无符号的源代码。