我正在尝试使用 Crosstool-NG 为 Raspberry Pi 构建交叉编译工具链。我已经这样做了。但是,当我尝试使用--sysroot
选项(如本答案中所述)将我的工具链与来自 Raspberry Pi 的 rootfs 一起使用时,我收到以下错误:
/usr/include/features.h:364:25: fatal error: sys/cdefs.h: No such file or directory
问题是 Raspberry Pi 设备上的此标头位于 中/usr/include/arm-linux-gnueabihf
,而不仅仅是/usr/include
目录中。我可以使用标志将此目录添加到包含目录列表中-I
,但随后出现以下错误:
/arm-unknown-linux-gnueabihf/bin/ld: cannot find -lm
问题类似:libm
库位于 中/usr/lib/arm-linux-gnueabihf
,而不仅仅是/usr/lib/
目录中。当然我可以使用-L
flag 来解决这个问题,但无论如何我都会收到以下错误:
/arm-unknown-linux-gnueabihf/bin/ld: cannot find crt1.o: No such file or directory
原因是一样的:crt1.o
位于/usr/lib/arm-linux-gnueabihf
目录中。并且没有标志可以解决这个问题。我的编译器配置为crt1.o
在/usr/lib/
目录中搜索。而且我必须在子目录中的文件中创建符号链接/usr/lib
来解决这个问题。crt
arm-linux-gnueabihf
因此,所有 libc 文件都位于非标准位置。crt1.o
在我的 Ubuntu 上,它也位于一个非标准位置,它位于/usr/lib/i386-linux-gnu
. 似乎许多工具链都使用这种行为,因此我猜这是gcc的一些标准功能。
所以问题是:是否有任何选项可以编译gcc以使其搜索头文件、库和crt1.o
某个特定位置?如何配置我的工具链以将所有libc文件放入arm-linux-gnueabihf
子目录?我想应该有一些 gcc配置选项来执行此操作。但是哪一个?