gcc - crosstool-ng 的 LD 在编译内核时给出“源对象 a/b/built-in.o 具有 EABI 版本 5,但目标 b/built-in.o 具有 EABI 版本 0”
问题描述
我刚刚为“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。
解决方案
推荐阅读
- python - Python:将字符串转换为八位字节格式
- php - 如何从 2 个不同的表中选择并插入到 1 个表
- javascript - 为什么 Node.js 只识别绝对路径?
- javascript - 更改标题只保存几秒钟(直到页面停止加载)
- django - 位置参数的 Django Rest API 类型错误
- powershell - 创建由 CPU 负载百分比触发的事件侦听器
- c# - 如何根据表 A 中列 A 的结果更新表 B 中的列 b
- javascript - 如何创建在特定条件下转到某个链接的复选框
- python - 如何检查从 Python 到 Neo4j 的连接
- javascript - 数组一直只填充一个对象