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
Другие вопросы по тегам