Решение проблем, возникающих при выполнении команд ./configure, make и make install
Очевидно, что ошибки при выполнении команды ./configure, возникают во время выполнения скрипта конфигурации, ошибки при выполнении команды make возникают во время выполнения команды make, а ошибки при выполнении команды make install, соответственно, возникают при выполнении команды make install. Далее будет представлен лист типичных ошибок и способ их решения, разделенный на эти три категории.
Ошибки при выполнении команды ./configure
Следующий список содержит некоторые общие ошибки, которые может выдать каманда ./configure. Ошибки отсортированы по частоте возникновения. Сначала наиболее часто встречающиеся. Вещи между ( и ) являются опциональными, они могут не появлятся. OR, выделенное жирным курсивом означает, что несколько ошибок имеют одно решение. Текст между < и >показывает тип строки, которая должна появиться в этом месте.
- (configure:) (error:) ( (or higher)) not found. (Please check your installation!) OR checking for . (configure:) (error:) not found. OR (configure:) (error:) ( (or newer)) is required to build
- Это обычно означает что -dev или -devel версия пакета ,который называется не установлена у вас на компьютере. Используйте менеджер пакетов вашего дистрибутива (или любой другой способ найти и установить пакет), чтобы найти пакет и установить его, если это возможно, -dev или -devel версию. Если -dev или -devel версия уже установлена, или её не сущечтвует, посмотрете на версию уже установленной. Она достаточно новая? Если она ниже, чем , попробуйте обновить пакет. Если обновить пакет не представляется возможным, вы можете попробовать скомпилировать более мтарую версию программы. Более старые версии обычно используют более старые версии библиотек и программ, необходимых для компиляции.
- (configure:) (error:) cannot find header (file) .h OR (configure:) (error:) (header) (file) .h missing! OR
- Конфигурационный скрипт не может найти .h файл, необходимый для компиляции. Эта ошибка похожа на предыдущую, в которой необходимо установить -dev или -devel версию пакета. Однако, обычно не понятно какой пакет нужно установить для решения этой проблемы, так как может быть очень общим названием. Попробуйте поискать в интернетет .h, чтобы узнать в каком пакете этот файл находится, а затем установите этот пакет (и его -dev или -devel версия, если это возможно) с помощью менеджера пакетов вашего дистрибутива.
- (configure:) (error:) no acceptable cc found in
- Вы используете для установки компилятор gcc, А переменная окружения CC отсутствует или не установлена. Убедитесь, что пакет gcc установлен, используя менеджер пакетов вашего дистрибутива. Если этот пакет не установлен, установите его. Если он установлен, попробуйте выполнить следующую команду: [rechosen@localhost ~]$ export CC="/usr/bin/cc" Если это помогло, вы можете добавить эту команду в /etc/profile (это файл, содержащий команды, которые выполняются когда пользователь входит в систему) и тогда вам не придется набирать её снова.
- (configure:) (error:) C++ preprocessor «/lib/cpp» fails sanity check
- Ваш пакет g++ отсутствует или поврежден. Используйте Используйте менеджер пакетов вашего дистрибутива (или любой другой способ найти и установить пакет), чтобы найти пакет g++ и установить его. Не забудьте, что в некоторых дистрибутивах этот пакет называется не g++. Fedora, например, использует название gcc-c++ в соем репозитарии yum. Если вы не можете найти g++, попробуйте поискать c++, cpp или gcc.
- (configure:) (error:) C++ preprocessor «CC (-E)» fails sanity check
- Эта ошибка вызвана странным «багом» в некоторых версиях библиотеки libtool, которая заставляет конфигурационный скрипт проверять все компиляторы поддерживающиеся libtool. Наиболее простое решение — установить g++.
Ошибки при выполнении команды make
- Если вы компилируете программу с использованием gcc 4 (используйте gcc -dumpversion чтобы это выяснить), попробуйте использовать более старые версии компилятора. Сначала убедитесь, что у вас установлена более старая версия. Обычно это можно узнать, использовав следующую команду: [rechosen@localhost ~]$ ls /usr/bin/gcc* Если она вернет что-то вроде этого: /usr/bin/gcc /usr/bin/gcc32 То можете использовать команды gcc32, чтобы скомпилировать программу в более ранними версиями gcc. Если команда не вернет подобной строки, то используя менеджер пакетов вашего дистрибутива, найдите и установите более ранние версии gcc (обычно они называются compat-gcc или gcc-). После установки, вам должна быть доступна альтернативная версия gcc. Её можно найти используя команду ls. Заставить команды ./configure, make и make install использовать более старую версию gcc можно так: [rechosen@localhost ~]$ CC="/usr/bin/gcc32" ./configure
[rechosen@localhost ~]$ CC="/usr/bin/gcc32" make
[rechosen@localhost ~]$ CC="/usr/bin/gcc32" make install Конечно путь /usr/bin/gcc32 надо заменить на тот, по которому у вас находится альтернативная версия gcc. - Иногда ошибки могут вызваны простым «багом» программы. Попробуйте скачать последнюю версию программы (используя её cvs, svn или другой репозитарий, или скачав последний снимок) и скомпилируйте её, возможно эта ошибка уже исправлена.
- Ошибка при выполнении комадны make может быть также вызвана неправильной версией необходимой библиотеки или программы. Эта проблема часто встречается для очень новых или очень старых пакетов. Проверьте зависимости пакета (они обчно написаны на сайте программы) и сравните номера версий с версиями, установленными у вас на компьютере (их обчно можно посмотреть, используя менеджер пакетов вашего дистрибутива). Если номер версии в вашей системе больше того, которые написан на сайте, возможно вы пытаетесь скомпилировать очень старый пакет. Если вам дейсвительно необходимо его скомпилировать, попробуйте установить более старые версии зависимых пакетов.Как бы то небыло, обычно лучше поискать другой способ установки этого пакета или поискать альтернативу. Если номер версии в системе меньше, чем на сайте, вы можете попробовать обновить соответствующий пакет.Вы можетепопробовать обновить требуемую библиотеку или скомпилировать более старую весию программы.Так же проверьте, может уже есть этот пакет, скомпилированный для авшего дистрибутива. Его установка, обычно, проще, чем исправление ошибок компиляции.
- Другая вещь, которую стоит попробовать — это поиск специфической ошибки в интернете. Если вы не нашли ничего полезного, попробуйте убрать такие вещи, как номер строки (он может измениться с новой версией), номер версии (его можно заменить звездочкой, если он содержится в названии программы) и специальные символы, такие как кавычки, так как они влияют на поисковый сервис. Обычно можно найти много информации в листе рассылок. Иногда выходит патч, который исправляет ошибки в исходном коде. Его можно применить слудеющим образом: [rechosen@localhost ~]$ patch -Np1 Не забудьте: чтобы применить патч, текущей должна быть директория с исходными текстами.
Ошибки при выполнении команды make install
Эти ошибки обычно легко понять, но я все равно про них напишу. Есть два наиболее частых случая, почему команда make install возвращает ошибку:
- У вас нет прав пользователя root. Попробуйте выполнить команду make install, используя команду sudo, или станеть пользователем root, используя команду su. Команда sudo применяется следующим образом: [rechosen@localhost ~]$ sudo make install Она спросит пароль; обычно используется собственный пароль или пароль пользователя root. Вы можете испльзовать команду su, чтобы стать польpователем root: [rechosen@localhost ~]$ su Эта команда тоже спросит пароль, но в данном случае наобходим именно пароль пользователя root. После того, как вы стали пользователем root, просто выполните команду make install.
- Пакет, который вы только что скомпилировали не имеет команды установки. В этом случае вам надо скопировать скомпилированный бинарный файл в директорию bin вручную. Если вы выполните команду ls в директории исходного кода, исполняемый файл должен быть светло зеленого цвета. Его надо скопировать в /usr/bin (или, если хотите, в /usr/local/bin) следующей командой: [rechosen@localhost ~]$ cp /usr/bin Я согласен, что это не всегда самый простой способ, но иногда разработчики не тратят время на создание команды установки. Мы не должны на них сердиться за это: ведь прежде всего они делают для нас полезную программу.
Вот список некоторых других возможных проблем и их решения:
- Все проходит хорошо, но когда я набираю имя программы, которую только что установил, bash говорить, что не может её найти. Это обычно происходит из-за того, что make install устанавливает все в /usr/local или in /opt/. Посмотрите на вывод команды make install: куда скопированы файлы? Попробуйте добвавить эту директорию в переменную PATH (следующий пример приведен для пакета, установленного в /usr/local): [rechosen@localhost ~]$ export PATH="$PATH:/usr/local/bin" Вам надо заменить /usr/local/bin на директорию, в которой установлены исполняемые файлы вашего пакета. Если это помогло, добавьте эту строку в /etc/profile, чтобы вам не пришлось набирать её каждый раз. Кстати, вы можете контролировать место, куда установится пакет, указав следующую опцию, когда запускаете конфигурационный скрипт: [rechosen@localhost ~]$ ./configure --prefix=/usr Измените /usr на директорию, в которую хотите установить пакет. Не забудьте, что вы устанавливаете только префикс; бинарные файлы установятся в свою поддиректорию, библиотеки в свою, заголовочные файлы в свою и т.д. Например при использовании указанного префикса, бинарные файлы будут установлены в /usr/bin.
- Я хочу установить очень старую версию пакета, но я не могу найти исходный код в интернете. У вас еще остается маленький шанс. Попробуйте найти rpm файл пакета той версии, которую вы хотите и скачайте соответствующий src rpm файл. Распаковать его можно следующим образом: [rechosen@localhost ~]$ rpm2cpio | cpio -idv Теперь можно использовать исходный код, извлеченный из rpm файла.
Это учебное пособие еще не закончено. Я планирую обновлять его, используя решения проблем, полученные от других пользователей. Поэтому я прошу вас комментировать эту статью и говорить, чтобы вы еще хотели увидеть в ней. Помните, что эта статья об основных ошибках. Не спрашивайте как скомпилировать определенную версию определенной программы. В любом случае, я надеюсь эта статья будет полезна для вас. Спасибо за прочтение и удачи в сложной, но увлекательной вещи, которая называется компиляция!
ошибка при сборке ядра
Хочу пересобрать ядро с 2.4.20-8 на 2.6.6 на Red Hat. Делаю. Написано что должно появиться /boot/vmlinuz-2.6.6 /boot/System.map-2.6.6 /boot/initrd-2.6.6.img и каталог модулей /lib/modules/2.6.6 /boot/initrd-2.6.1.img - не появляется. Ладно делаю новый initrd image для загрузки SCSI модуля : mkinitrd /boot/initrd-2.6.6.img, а он ругается : no module BusLogic found for kernel 2.6.6 Что я делаю неправильно и что за ошибка с BusLogic?
Re: ошибка при сборке ядра
mkinitrd /boot/initrd-2.6.6.img 2.6.6
посмотри чтобы была папка /lib/modules/2.6.6
елси initrd нет, значит он наверное не нужен!
> делаю новый initrd image для загрузки SCSI модуля
можно указать параметры которые ядру передовать, например:
append="hdb=ide-scsi" в lilo.conf
P.S. если где не прав поправляйте 🙂
Re: ошибка при сборке ядра
Прочитал: Файл /etc/conf.modules содержит линию для вашего SCSI адаптера. Например: alias scsi_hostadapter BusLogic (у меня так) Чтобы построить новый initrd image, выполните /sbin/mkinitrd с параметрами подобно этим: /sbin/mkinitrd /boot/newinitrd-image 2.0.12
Ядром балуюсь в Vmware, там по умолчанию SCSI диск.И все таки надо пытаться переделывать initrd(который из за BusLogic не хочет) или можно обойти append="hdb=ide-scsi" в lilo.conf ? И BusLogic-это драйвера что ли и откуда их ставить или заменить чем?
Re: ошибка при сборке ядра
я думаю можно можно обойтись без initrd, нужно рпосто ядру правильно параметры твое го диска передать и все! На сколько я знаю initrd всегда создается если он необходим, если его нет, значит можно без него обойтись! как? смотри man bootparam
> BusLogic-это драйвера что ли
написано же: scsi_hostadapter BusLogic
Re: ошибка при сборке ядра
Сделал так: копирнул из /lib/modules/2.4-20.8/kernel/drivers/scsi/BusLogic.o в /lib/modules/2.6.6/kernel/drivers/scsi/BusLogic.o, хотя там уже был файл BusLogic.ko. initrd-2.6.6.img после этого вроде создался.Я правильно сделал? И что это за файлы BusLogic.o и BusLogic.ko?
Re: ошибка при сборке ядра
*.o - модуль для ядра 2.4 *.ko - модуль дя ядра 2.6
ты вообще module_init_tools ставил?
поди в FAQ и посмотри как перейти на ядро 2.6 там многа интересного написано!
Похожие темы
- Форум проблемы с компиляцией ядра (2004)
- Форум Сборка 2.6.0-test9 (2003)
- Форум ядро 🙂 (2005)
- Форум ядро 2.6.0 (2003)
- Форум после компиляции и сборки нового ядра отсутствует img (2004)
- Форум Как собрать ядро 2.6.8 (2007)
- Форум Криво ядро поставил ? (2003)
- Форум установка двух linux (2003)
- Форум CentOS 7 не грузится с новым ядром (2019)
- Форум Не загружается ядро. (2003)