Raspberry Pi - фатальная ошибка: sys/cdefs.h: такого файла или каталога нет
Я пытаюсь скомпилировать gcc5.3.0 на Raspberry Pi с последним образом системы Raspbian.
$ ./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) жалуется на отсутствие sys / cdefs.h при компиляции libgcc.
Я проверил у меня libc6-dev
а также build-essential
установлены.
Так что я использовал grep -R 'cdefs' /usr/include/
чтобы найти его, я нашел его в / usr / include / bsd /. Я создал каталог sys и сделал жесткие ссылки на эти заголовки в / usr / include / bsd / sys.
На этот раз это дало мне более странную ошибку, /usr/include/stdio.h:312:8: error: неизвестное имя типа 'FILE'.
Я искал это на stackru, и есть аналогичный вопрос, /questions/33221224/oshibka-kompilyatora-c-iz-standartnyih-zagolovkov-neopredelennyie-opredeleniya-c/33221233#33221233. Но когда я удалил / usr / include / sys и /usr/include/bsd, затем переустановил libc6-dev, я не могу найти sys / cdefs.h в /usr/include, и компилятор по-прежнему выдает ошибки.
Я сейчас полностью потерян. Любое предложение будет оценено.
2 ответа
У меня была похожая проблема с компиляцией 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/
Я также столкнулся с этой проблемой при создании контейнерной среды сборки для кросс-скомпилированных приложений Qt для raspberry pi 4.
Я обнаружил, что мне нужно отредактировать mkspec для устройства linux-rasp-pi4-v3d и добавить еще один cflag, чтобы gcc мог найти заголовок из моего системного корня Raspi, который использовался для кросс-компиляции 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