一、问题描述:在编译Busybox时更换平台时,会出现Failed的日志报警:
make -j2 0=$BUILD_DIR/busybox_arm64/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
发生原因,是由一个未定义的undefined reference to `stime'函数引起的:
解决方法是查找关键词,并进入libbb/missing_syscalls.c,将控制stime生效的宏打开:
grep -rn "stime("
再编译结果:
make -j2 0=$BUILD_DIR/busybox_arm64/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
error的根本原因,由于新的平台的交叉编译链aarch64-linux-gnu-gcc所链接的库是没有stime函数定义的,在旧的平台的交叉编译工具链是有这个函数stime的生效的。简单地说就是交叉编译的IDE环境不一样
二、gcc-aarch64-linux-gnu、aarch64-linux-gnu-gcc、aarch64-linux-gnu-有什么区别
gcc-aarch64-linux-gnu、aarch64-linux-gnu-gcc 和 aarch64-linux-gnu- 是与交叉编译工具链相关的术语,它们之间的区别在于命名和使用场景的不同。
术语解释:
1. gcc-aarch64-linux-gnu
这是一个软件包的名字,通常指的是包含整个交叉编译工具链的软件包。这个包可能包含了编译器 (gcc)、汇编器 (as)、链接器 (ld) 等一系列工具。
2. aarch64-linux-gnu-gcc
这是一个特定的编译器的名称,指的是用于 AArch64 架构的 GCC 编译器。它是一个具体的可执行文件,用于编译源代码。
3. aarch64-linux-gnu-
这是一个前缀,通常用于指定一系列交叉编译工具。当你配置交叉编译工具链时,通常会在 Makefile 或其他构建配置文件中指定这个前缀,以指示所有相关工具都使用相同的架构和平台标识符。
sudo apt install gcc-aarch64-linux-gnu
aarch64-linux-gnu-gcc --v
CROSS_COMPILE=aarch64-linux-gnu-
编译器:aarch64-linux-gnu-gcc
汇编器:aarch64-linux-gnu-as
链接器:aarch64-linux-gnu-ld
aarch64-linux-gnu-gcc -v 是一个命令,用来显示 aarch64-linux-gnu-gcc 编译器的详细版本信息和配置情况。这个命令非常有用,因为它可以提供关于编译器的详细信息,包括它的版本号、编译选项、搜索路径等
示例:
Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/11/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.2.0-17ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,c++,go,lto-assembly --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-system-zlib --enable-targets=all --enable-multilib --disable-werror --with-arch=armv8-a+crc+crypto --with-fpu=neon --with-float=hard --with-mode=thumb --with-tune=cortex-a57 --enable-bootstrap --enable-lto --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
Supporting plugins: yes
gcc version 11.2.0 (Ubuntu 11.2.0-17ubuntu1~22.04)
/home/user/test.c
/tmp/ccFzD6JX.o