1

我刚刚为“arm-unknown-eabi”创建了一个带有 crosstool-ng 的 gcc11 交叉编译器来编译我的内核(用于 msm8974 芯片组的 android),但是在链接的某个时刻,LD 给出了这个关于 EABI 版本的错误,但是目标文件甚至不存在。这些是 crosstool 工具链的组件:

  • binutils-2.34.tar.xz
  • gcc-git-46a58c77.tar.bz2
  • gettext-0.20.1.tar.xz
  • gmp-6.2.0.tar.xz
  • isl-0.22.tar.xz
  • libiconv-1.16.tar.gz
  • mpc-1.1.0.tar.gz
  • mpfr-4.0.2.tar.xz
  • ncurses-6.2.tar.gz
  • newlib-3.3.0.tar.gz

给出错误的完整命令是这样的:

  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld -EL -r -o drivers/gpu/built-in.o drivers/gpu/drm/built-in.o drivers/ gpu/ion/built-in.o
  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld:错误:源对象驱动程序/gpu/ion/built-in.o 具有 EABI 版本 5,但目标驱动程序/gpu/built -in.o 有 EABI 版本 0
  • /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld: 未能合并文件驱动程序/gpu/ion/built-in.o的目标特定数据

查看这些文件:

  • drivers/gpu/built-in.o:无法打开“drivers/gpu/built-in.o”(没有这样的文件或目录)
  • drivers/gpu/drm/built-in.o:ELF 32 位 LSB 可重定位,ARM,版本 1 (ARM),未剥离
  • drivers/gpu/ion/built-in.o:ELF 32 位 LSB 可重定位,ARM,EABI5 版本 1 (SYSV),未剥离

真正的目标(drivers/gpu/built-in.o)甚至不存在。DRM 之一(不显示为 EABI5)虽然很小(320 字节,我认为它是由 AR 创建的?)。

使用另一个工具链,一切都与这个完全相同的内核代码、Makefile 等配合得很好。我之前使用的是 musl gcc 10。

4

0 回答 0