错误是正确的 - 我的系统没有安装 libdebuginfod.so.1 - 但我有另一个跨 binutils,从二进制文件安装到不同的目标,它的 objdump -S 在同一主机上工作正常。为什么一个 objdump 构建会抱怨缺少该共享库,而显然并非所有 objdump 构建都需要它?
首先,我尝试重建交叉 binutils,将 --without-debuginfod 指定为配置选项。没有变化,这似乎很奇怪:当然,这应该构建不仅不使用 debuginfod 并且不以任何方式依赖它的工具。(如果有人可以回答这个问题,或者指出我误解了什么,它可能会对人们有所帮助。)
接下来我认为 debuginfod 是不可避免的(至少对于我从源代码构建的交叉工具),所以我会安装它以消除错误。它是 elfutils 软件包的一个组件,但安装适用于我的 Ubuntu 20.04 系统的最新 elfutils 并没有带来 libdebuginfod.so.1。
我为 Arch Linux 找到了后来的一个,它的包内容表明它会 - 但它的包格式与 Ubuntu 不匹配,安装它会涉及很多工作。相反,我选择从Arch Linux 源代码包构建它。但是,在其上运行 ./configure 会出现一些非常相似的错误:
configure: checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip
...
configure: error: dependencies not found, use --disable-libdebuginfod to disable or --enable-libdebuginfod=dummy to build a (bootstrap) dummy library.
这些建议的任何组合都不会允许配置 elfutils-0.182 运行完成。
问题当然是我自己缺乏理解。解决方案来自Linux From Scratch项目:有效的方法是使用两个建议的选项进行配置,如下所示:
$ ./configure --prefix=/usr \
--disable-debuginfod \
--enable-libdebuginfod=dummy \
--libdir=/lib
这给出了一个干净的配置;make 第一次工作,就像 make check 然后 sudo make install 一样,它当然根据需要安装了 libdebuginfod.so.1。然后我有一个 arm-none-eabi-objdump 可以反汇编交叉编译的 ELF 文件而不会抱怨。