我已经使用 crosstool-ng 为 ARM Cortex-A8 构建了一个交叉编译器,但在尝试编译最简单的程序时遇到了一些问题。
尝试编译test.h
:
$ arm-linux-gnueabihf-gcc -o prog test.c
test.c:1:20: fatal error: stdlib.h: No such file or directory
#include <stdlib.h>
^
compilation terminated.
我在特定目录中生成了工具链,然后将其复制到我的主目录中的另一个文件夹中。这个工具链应该被其他人用来开发应用程序,所以我将它移到了更“合理”的路径。
之后,我尝试使用工具链直接从最初生成的路径编译相同的代码,并且它有效。我怀疑这与目标 sysroot 的路径有关,但在检查后--print-sysroot
,似乎两个路径都与工具链二进制文件的当前位置一致。 (注意:我将复制的工具链的路径添加到我的$PATH
任何其他目录之前)
$ /home/guilherme/Toolchain/bin/arm-linux-gnueabihf-gcc --print-sysroot # Copy
/home/guilherme/Toolchain/bin/../arm-cortex_a8-linux-gnueabihf/sysroot
$ /home/guilherme/Development/toolchain/tools/arm-cortex_a8-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --print-sysroot # Original
/home/guilherme/Development/toolchain/tools/arm-cortex_a8-linux-gnueabihf/arm-cortex_a8-linux-gnueabihf/sysroot
对这个问题有帮助吗? ct-gn 中是否有任何选项允许我创建可以移动/复制到其他文件夹/机器的工具链?
答案1
找出问题所在了。
我用来make headers_install ARCH=arm HDR_INSTALL_PATH=${TOOLCHAIN_SYSROOT}/usr
更新工具链标头。但是,这会复制一些(不是全部)标头,以${KERNEL_PATH}/include/linux
“${TOOLCHAIN_SYSROOT}/usr
清理”除复制的标头之外的任何标头,从而删除 stdio.h、math.h 和其他“不重要”标头。