Вопрос или проблема
При кросс-компиляции OpenWRT я заменил инструментальную цепочку OpenWRT на инструментальную цепочку архитектуры i686. Но я получаю нижеуказанную ошибку:
make[5]: Выход из директории `/home/hclintel/pankaj/fresh/trunk/build_dir/target-i386_i486_musl-1.1.10/linux-x86_generic/linux-3.18.18'
./scripts/gcc-version.sh: строка 25: i686-cm-linux-gcc: команда не найдена
./scripts/gcc-version.sh: строка 26: i686-cm-linux-gcc: команда не найдена
make[5]: Вход в директорию `/home/hclintel/pankaj/fresh/trunk/build_dir/target-i386_i486_musl-1.1.10/linux-x86_generic/linux-3.18.18'
arch/x86/Makefile:114: stack-protector включен, но поддержка компилятора сломана
Makefile:657: Не удается использовать CONFIG_CC_STACKPROTECTOR_REGULAR: -fstack-protector не поддерживается компилятором
make[5]: i686-cm-linux-gcc: Команда не найдена
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CC kernel/bounds.s
/bin/sh: 1: i686-cm-linux-gcc: не найден
make[6]: *** [kernel/bounds.s] Ошибка 127
make[5]: *** [prepare0] Ошибка 2
make[5]: Выход из директории `/home/hclintel/pankaj/fresh/trunk/build_dir/target-i386_i486_musl-1.1.10/linux-x86_generic/linux-3.18.18'
make[4]: *** [/home/hclintel/pankaj/fresh/trunk/build_dir/target-i386_i486_musl-1.1.10/linux-x86_generic/linux-3.18.18/.modules] Ошибка 2
make[4]: Выход из директории `/home/hclintel/pankaj/fresh/trunk/target/linux/x86'
make[3]: *** [compile] Ошибка 2
make[3]: Выход из директории `/home/hclintel/pankaj/fresh/trunk/target/linux'
make[2]: *** [target/linux/compile] Ошибка 2
make[2]: Выход из директории `/home/hclintel/pankaj/fresh/trunk'
make[1]: *** [/home/hclintel/pankaj/fresh/trunk/staging_dir/target-i386_i486_musl-1.1.10/stamp/.target_compile] Ошибка 2
make[1]: Выход из директории `/home/hclintel/pankaj/fresh/trunk'
make: *** [world] Ошибка 2
hclintel@hclintel-ThinkCentre-M73:~/pankaj/fresh/trunk$
Когда я запускаю echo $PATH
, я получаю нижеуказанный результат:
/home/hclintel/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Я думаю, что мне нужно изменить путь в конфигурационном файле, но я не могу найти правильное место для изменения пути.
1) Вам нужно найти, где существует i686-cm-linux-gcc.
2) Как вы собираете OpenWRT? Я предполагаю, через Make.
Для этого вам нужно отредактировать Makefile и добавить путь туда.
Должно быть утверждение в одном из Makefile, где назначается компилятор.
Измените
CC=i686-cm-linux-gcc
на
CC=/path/to/i686-cm-linux-gcc
Ответ или решение
Ошибка "i686-cm-linux-gcc: Command not found" при кросс-компиляции OpenWRT
Если вы столкнулись с ошибкой i686-cm-linux-gcc: command not found
во время кросс-компиляции OpenWRT, это указывает на то, что система не может найти указанный компилятор. Рассмотрим все шаги, которые помогут вам исправить данную проблему.
1. Проверка наличия компилятора
Первым делом необходимо убедиться, что компилятор i686-cm-linux-gcc
установлен на вашем компьютере. Для этого выполните следующую команду в терминале:
which i686-cm-linux-gcc
Если вы ничего не получите в ответ, это означает, что компилятор не установлен или не находится в вашем PATH
.
2. Установка компилятора
Если компилятор действительно отсутствует, вам нужно установить его. Обычно, для установки кросс-компилятора для архитектуры i686 можно воспользоваться пакетным менеджером вашей операционной системы. Например, в Ubuntu это можно сделать с помощью следующей команды:
sudo apt-get install gcc-i686-linux-gnu
Если пакет gcc-i686-linux-gnu
не поддерживает необходимые функции, возможно, вам потребуется вручную загрузить и установить требуемую версию компилятора.
3. Обновление переменной PATH
Если компилятор установлен, но система его не видит, вам нужно добавить путь к директории с компилятором в переменную среды PATH
. Вы можете сделать это, отредактировав файл конфигурации вашей оболочки. Для bash это будет файл ~/.bashrc
, а для zsh — ~/.zshrc
.
Добавьте следующую строку в конец файла:
export PATH=$PATH:/path/to/your/compiler
Не забудьте заменить /path/to/your/compiler
на фактический путь к вашему компилятору. После внесения изменений выполните команду для применения изменений:
source ~/.bashrc # для bash
или
source ~/.zshrc # для zsh
4. Настройка Makefile
При сборке OpenWRT с использованием make
, вам может понадобиться указать путь до компилятора прямо в Makefile. Найдите строку, где назначается переменная CC
. Например:
CC=i686-cm-linux-gcc
Измените её на полный путь к вашему компилятору:
CC=/path/to/i686-cm-linux-gcc
5. Проверка конфигурации
Также убедитесь, что вы правильно настроили конфигурации kernel. Ошибка stack-protector enabled but compiler support broken
может указывать на то, что выбранный компилятор не поддерживает некоторые опции компиляции. Проверьте настройки конфигурации, связанные с защитой стека. Возможно, вам нужно отключить CONFIG_CC_STACKPROTECTOR_REGULAR
.
6. Запуск сборки
После всех изменений попробуйте снова запустить сборку OpenWRT с командой:
make
Если все прошло успешно, ошибка i686-cm-linux-gcc: command not found
не должна появляться.
Заключение
Ошибки при кросс-компиляции могут быть сложными для диагностики, но следуя вышеуказанным шагам, вы сможете выявить и устранить проблему. Убедитесь, что все пути указаны правильно, а необходимый программный инструментарий установлен. Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью в сообщества разработчиков OpenWRT.