如果你有一个答案,或者更多的信息,我很欢迎。我遵循这里的建议,通过发布这个问题和我已经找到的答案来提供一些不请自来的帮助。
我有一个裸机ARM板,我正在为它构建一个跨工具链,来自GNU binutils, gcc和gdb的源代码,以及SourceWare的Newlib。我得到了这四个工作,并将DoNothing.c交叉构建到一个ELF文件中-但我无法用以下命令反汇编它:
$ arm-none-eabi-objdump -S DoNothing.elf
错误是:
$ arm-none-eabi-objdump: error while loading shared libraries: libdebuginfod.so.1: cannot open shared object file: No such file or directory
我会跟进一个解决方案。
错误是正确的-我的系统没有libdebuginfo .so。但我有另一个跨binutils,从二进制安装到不同的目标,它的objdump - s在同一主机上运行良好。为什么一个构建的objdump会抱怨缺少共享库,明明不是所有构建的objdump都需要它?
首先,我尝试跨binutils重新构建,指定——without-debuginfo作为配置选项。没有变化,这看起来很奇怪:当然应该构建不仅不使用debuginfo,而且不以任何方式依赖于它的工具。(如果有人能回答这个问题,或者指出我误解的地方,可能会对大家有所帮助。)
接下来,我认为debuginfo是不可避免的(至少对于我从源代码构建的跨工具来说),所以我安装它来消除这个错误。libdebuginfo .so是elfutils包的一个组件,但是在我的Ubuntu 20.04系统上安装最新的elfutils并没有带来libdebuginfo .so。
我找到了一个较晚的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当然安装了libdebuginfo .so。1 .按要求。然后我有了一个arm-none-eabi-objdump,它可以不报错地反汇编交叉编译的ELF文件。