Вопрос или проблема
Я пытался собрать
gcc4.6.2 для сборки системы android 2.3.7.
Я установил linux-libc-dev
с разными версиями (3.8.0
и 4.4.0
) и разными архитектурами (linux-libc-dev
и linux-libc-dev:i386
), но все равно столкнулся со следующими ошибками:
Я не знаю, как исправить сборку gcc4.6.2 после просмотра всех видов обсуждений по этой проблеме на веб-сайте. Может кто-нибудь помочь мне и показать, как это исправить?
В файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталога
сборка завершена.
make[3]: *** [_muldi3.o] Ошибка 1
make[3]: *** Ожидание незавершенных задач....
В файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталога
сборка завершена.
make[3]: *** [_negdi2.o] Ошибка 1
В файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталогаВ файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталога
сборка завершена.
make[3]: *** [_ucmpdi2.o] Ошибка 1
сборка завершена.
make[3]: *** [_lshrdi3.o] Ошибка 1
В файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталогаВ файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталога
сборка завершена.
В файле, включенном из /usr/include/bits/errno.h:24:0,
из /usr/include/errno.h:35,
из ../../../gcc-4.6.2/libgcc/../gcc/tsystem.h:93,
из ../../../gcc-4.6.2/libgcc/../gcc/libgcc2.c:29:
/usr/include/linux/errno.h:1:23: фатальная ошибка: asm/errno.h: Нет такого файла или каталогаmake[3]: *** [_ashldi3.o] Ошибка 1
сборка завершена.
make[3]: *** [_cmpdi2.o] Ошибка 1
сборка завершена.
make[3]: *** [_ashrdi3.o] Ошибка 1
make[5]: Вход в каталог `/home/paultsai/gcc/x86_64-linux-gnu/32/libgcc'
# Если это верхний уровень multilib, соберите все остальные
На моей системе Ubuntu 14.05.5 (ваши результаты могут отличаться), /usr/include/asm/errno.h
предоставляется следующими пакетами:
linux-headers-*
linux-libc-dev:amd64
linux-libc-dev:i386
Ответ или решение
Проблема, с которой вы столкнулись при сборке GCC 4.6.2 для Android 2.3.7, связана с отсутствием файла asm/errno.h
. Эта ошибка может возникать по нескольким причинам, и её решение требует подробного анализа установленного программного обеспечения и системной конфигурации.
1. Причина проблемы
Ошибка, которую вы видите:
fatal error: asm/errno.h: No such file or directory
указывает на то, что компилятор не может найти файл-включаемый заголовок errno.h
, который должен находиться по пути /usr/include/asm/errno.h
. Этот файл необходимо для корректного компилирования кода, так как он предоставляет определения ошибок для архитектуры системы.
2. Проверка установленных пакетов
Как было отмечено, в вашем случае errno.h
может поставляться пакетами:
linux-headers-*
linux-libc-dev:amd64
linux-libc-dev:i386
Для начала убедитесь, что установлены необходимые заголовочные файлы. Это можно сделать с помощью следующих команд:
sudo apt-get update
sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install linux-libc-dev
3. Проверка содержания каталогов
Убедитесь, что нужные файловые пути существуют в вашей системе. Проверьте наличие файла errno.h
по следующим путям:
ls /usr/include/asm
ls /usr/include/linux
Если файла нет, это может указывать на то, что установочные пакеты, содержащие соответствующие заголовочные файлы для вашей архитектуры, не были загружены.
4. Архитектурные ограничения
Если вы находитесь на 64-битной системе и пытаетесь собрать 32-битный бинарный файл, есть вероятность, что могут отсутствовать 32-битные заголовочные файлы. Убедитесь, что установлены как 64-битные, так и 32-битные версии, используя команды:
sudo apt-get install linux-libc-dev:i386
5. Обновление системы
Всегда полезно обновить систему и проверить наличие новых версий пакетов, так как ошибки могут быть устранены в более поздних релизах. Для этого выполните:
sudo apt-get upgrade
sudo apt-get dist-upgrade
6. Переустановка GCC
Если предыдущие шаги не помогли, можно попробовать переустановить GCC и все его зависимости:
sudo apt-get remove --purge gcc
sudo apt-get install gcc
7. Установка альтернативных версий
Если вы продолжаете испытывать трудности, рассмотрите возможность использования более новых версий GCC или компиляции из исходных кодов более свежих релизов. Лучшие версии GCC могут содержать улучшенную поддержку для вашей цели:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-7
Заключение
Следуя вышеизложенным шагам, вы сможете устранить ошибку, связанную с отсутствием файла asm/errno.h
, и успешно скомпилировать GCC 4.6.2 для Android. Убедитесь, что все зависимости установлены и что вы используете правильные версии пакетов для вашей архитектуры. Если проблема сохраняется, возможно, стоит обратиться к документации или специализированным форумам, посвященным разработке под Android, для получения более конкретной помощи.