我正在尝试使用最新的Raspbian系统映像在我的Raspberry Pi上编译gcc5.3.0。
$ ./configure --enbale-checking=release --enable-languages=c,c++,fortran --host=arm-cortexa7_neon-linux-gnueabihf --build=arm-cortexa7_neon-linux-gnueabihf --target=arm-cortexa7_neon-linux-gnueabihf
$ make
然而,原始编译器(gcc4.9)抱怨在编译libgcc时没有建立sys/cdefs.h。
我检查了我已安装libc6-dev
build-essential
。
所以我用grep -R 'cdefs' /usr/include/
搜索它,我在/usr/include/bsd/找到了它。我创建了sys目录,并在/usr/include/bsd/sys下建立了指向这些标头的硬链接。
这次它给了我一个更奇怪的错误,/usr/include/stdio.h:312:8:错误:未知类型名称"FILE"。
我在stackoverflow上搜索了这个,还有一个类似的问题,https://stackoverflow.com/a/21047237/5691005。但是当我删除/usr/include/sys 和/usr/include/bsd 然后重新安装 libc6-dev 时,我在/usr/include 下找不到 sys/cdefs.h,并且编译器仍然给出错误。
我现在完全迷失了。任何建议将不胜感激。
我在编译 gcc-8.2 时遇到了类似的问题。我尝试按照此处所述重新安装进行操作:
sudo apt-get --reinstall install libc6 libc6-dev
之后,我找到了所有丢失的标题:
find / -name cdefs.h
并将它们复制到/usr/include:这些步骤只允许向前推进,但我仍然没有设法完全建立 GCC。
我发现的最佳解决方案是从以下位置下载 gcc-8.1 的编译版本:https://solarianprogrammer.com/2017/12/07/raspberry-pi-raspbian-compiling-gcc/
在为 raspberry pi 4 的交叉编译 Qt 应用程序创建容器化构建环境时,我也遇到了这个问题。
我发现我需要编辑 linux-rasp-pi4-v3d 设备的 mkspec 并添加另一个 cflag,以便 gcc 可以从我的 Raspi sysroot 中找到用于交叉编译 Qt 的标头。
具体而言,qtbase/mkspecs/devices/linux-rasp-pi4-v3d-g++/qmake.conf
:
QMAKE_CFLAGS = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8 -I$$[QT_SYSROOT]/usr/include/arm-linux-gnueabihf