我注意到了一个奇怪的问题。为了构建古老的 uboot (2012.10),我使用了外部工具链 (uClibc-ng)。我正在构建 ARM 目标。这是我正在使用的命令:
PATH='/home/build/src/build/x-tools/armv7a-g4.9.2-lnx3.2.69-uClibc-ng-1.0.22/install/arm-onie-linux-uclibcgnueabi/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' make CROSS_COMPILE=arm-onie-linux-uclibcgnueabi-
构建开始,但我无意中注意到,外部工具链没有被使用。我已经通过向 u-boot Makefile 添加几行来验证这一点:
+GCCVERSION = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
+ifeq "$(GCCVERSION)" "7.5.0"
+$(error *** IT DOES NOT SEEM LIKE YOU ARE USING CROSS-COMPILER TOOLCHAIN! ***)
+endif
很奇怪,因为分析日志似乎很明显,“CROSS_COMPILE=”前缀没有被使用。我尝试将 PATH 和 CROSS_COMPILE 导出到环境中,但它也不起作用。
我正在 Ubuntu-18 上的 Docker 容器中构建它。
我错过了什么?
这个问题问得好..不是很聪明。代替: (..) +GCCVERSION = $(shell gcc --version | grep ^gcc | sed 's/^.* //g') (..)
我应该测试: +GCCVERSION = $(shell $(CC) --version | (..))
基本上我调用的是 GCC 而不是 $CC,它将被设置为实际的交叉编译器。