「arm-unknown-eabi」の crosstool-ng を使用して gcc11 クロスコンパイラを作成し、カーネル (msm8974 チップセットのアンドロイド) をコンパイルしましたが、リンクのある時点で、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: エラー: ソース オブジェクト drivers/gpu/ion/built-in.o には EABI バージョン 5 がありますが、ターゲット drivers/gpu/built -in.o には EABI バージョン 0 があります
- /root/x-tools/arm-unknown-eabi/bin/arm-unknown-eabi-ld: ファイル drivers/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 を使用していました。