Вопрос или проблема
Я использую Ubuntu 18.04 на сервере. Я уже установил gcc-4.9 под root, но сейчас хочу установить gcc-7.4 в свой собственный каталог, поэтому я сделал следующее. Сначала я скачал gcc-7.4.0.tar.gz
и распаковал его. Затем cd gcc-7.4.0/
и скачал необходимые пакеты с помощью команды ./contrib/download_prerequisites
, затем я выполнил
mkdir build
и
cd build
Я хочу установить gcc-7.4 в свой каталог без root-прав, поэтому я указал prefix=/home/myusername/bin/
для компиляции. Полная команда выглядит следующим образом.
../configure --prefix=/home/xxx/bin --enable-shared --enable-threads=posix --enable-languages=c,c++,fortran --disable-multilib
Но затем я получил ошибку. Я заглянул в файл config.log
, в котором говорится:
Thread model: posix
gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntu2)
configure:4314: $? = 0
configure:4303: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:4314: $? = 4
configure:4303: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:4314: $? = 4
configure:4334: checking for C compiler default output file name
configure:4356: gcc conftest.c >&5
gcc: error trying to exec 'cc1': execvp: No such file or directory
configure:4360: $? = 1
configure:4397: result:
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:4403: error: in `/home/zxw/gcc-7.4.0/build':
configure:4407: error: C compiler cannot create executables
See `config.log' for more details.
в нем говорится C compiler cannot create executables
, а также trying to exec 'cc1': execvp: No such file or directory
. Я искал обе проблемы и ссылался на это, но это не помогло.
Я новичок в этом и не знаю, что именно происходит. Может кто-нибудь мне помочь? Если вам нужна дополнительная информация, пожалуйста, дайте знать, я не знаю, что могу сделать, чтобы проверить это дальше.
Обновление:
1. Я не могу установить обе версии для всей системы, потому что я готовлю среду на сервере своей лаборатории, к которому у меня нет root-доступа. Поэтому именно по этой причине я попытался установить нужную версию gcc в свой каталог.
2. Причина, по которой мне нужен gcc-7.4.0, заключается в том, что я готовлю среду для проекта detectron2
, который предоставлен Facebook и используется для обучения обнаружению объектов. И согласно требованиям установки detectron2
, мне нужно сначала подготовить cuda
и gcc
. У меня уже есть cuda-10.1
, ubuntu-18.04
, поэтому я искал, какая версия gcc мне нужна, и на официальном сайте nvidia говорится, что версия gcc, соответствующая cuda-10.1
и ubuntu-18.04
, это и только gcc-7.4
, поэтому я устанавливаю именно эту версию gcc.
3. Извините, я не знаю, как был установлен gcc-4.9
, причина та же, что и в пункте 1, я просто пользователь сервера своей лаборатории, он уже здесь с тех пор, как я присоединился к лаборатории.
Второе обновление.
Я следовал этому и попытался снова, команды, которые я использовал, приведены ниже.
tar xzf gcc-7.4.0.tar.gz
cd gcc-7.4.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
/home/xxx/gcc-7.4.0/configure --prefix=/home/xxx/GCC-7.4.0
И затем получил тот же отчет об ошибке.
Я сомневаюсь, что с существующей версией gcc что-то не так, поэтому я не могу построить новую версию на основе предыдущего gcc.
Я сразу заметил следующее:
Thread model: posix
gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntu2)
Кажется, что он пытается использовать старую версию gcc, которую вы установили, 4.9, чтобы построить 7.4. Я немного посмотрел вокруг и не нашел указаний, какие старые версии gcc способны собирать новые версии, но я бы не удивился, если 7.4 использует функции, которые 4.9 не поддерживает.
Есть ли особая причина, по которой вам нужно использовать 4.9.3 для сборки 7.4.0? Если нет, я бы посоветовал установить предустановленную версию gcc от Ubuntu (sudo apt install gcc-7
), которая, похоже, предоставит 7.5.0 на Ubuntu 18.04, и использовать её вместо этого.
ИЗМЕНЕНИЕ.
- Вы можете попробовать установить предварительно скомпилированный
gcc-7.4.0
только для своего пользователя, 1, 2, YMMV.
Рекомендации и другие заметки:
-
Установите обе версии для всей системы. Затем используйте
update-alternatives
, чтобы выбрать, какая версия будет использоваться по умолчанию. На самом деле это часто делается автоматически в процессе установки, и вы можете позже изменить свой выбор черезupdate-alternatives
, см. это.
Также вы можете выбрать, какую версию использовать для каждого пользователя, как здесь.
Это гораздо проще, чем то, что вы пытаетесь сделать, и сделает обе версии доступными для всех пользователей. -
Если у вас есть какие-либо причины все еще предпочитать ваш метод (было бы полезно, если бы вы указали свои причины, другие также могут предоставить дополнительные идеи), я предлагаю вам следовать этому (с подходящим номером версии). Похоже, вы пропустили/изменили часть из этого.
Например, типичное расположение – это--prefix=/home/xxx/gcc-<version>
, а не--prefix=/home/xxx/bin
. Независимо от того, является ли это причиной проблем, я предлагаю сначала начать с перечисленных команд, и если это сработает, тогда начните добавлять флагиconfigure
по мере необходимости. -
Вы можете рассмотреть возможность установки предварительно скомпилированных пакетов для необходимых пакетов, вместо
./contrib/download_prerequisites
, как описано здесь. -
Пожалуйста, разместите точную команду, которую вы использовали для “уже установленного gcc-4.9 под root” (пожалуйста, потратьте 30 секунд на это).
Установка “под root” – это не то, что вы обычно хотите делать. -
Я бы сначала воспользовался предложениями, вместо того чтобы пытаться выяснить, почему вы получили свои ошибки.
Просто чтобы предоставить несколько указателей на возможные причины (не буду углубляться в это):5.1. Для
gcc: error: unrecognized command line option '-V'
: 1, 2.5.2. Для
gcc: error: unrecognized command line option '-qversion'
: см. выше.5.3. Для
gcc: error trying to exec 'cc1': execvp: No such file or directory
: 1.5.4. Для
configure:4407: error: C compiler cannot create executables
: 1 в качестве примера. Одна из ваших опцийconfigure
вероятно является виновником. Начните, как указано в пункте 2.
Ответ или решение
Ошибка компиляции с использованием GCC может быть связана с различными проблемами, особенно при попытке установить более новую версию компилятора в среде, где уже установлена старая версия. Рассмотрим несколько ключевых причин и решений вашей проблемы при установке GCC 7.4 на Ubuntu 18.04.
Общая информация о проблеме
Вы упомянули, что получаете следующую ошибку при запуске команды configure
:
configure:4407: error: C compiler cannot create executables
или
gcc: error trying to exec 'cc1': execvp: No such file or directory
Эти сообщения указывают на то, что ваша операционная система не может создать исполняемый файл, вероятно, из-за неправильной конфигурации среды или недостающих компонентов.
Причины возникновения ошибок
-
Использование старой версии GCC: Вы пытаетесь использовать GCC 4.9.3 для сборки GCC 7.4.0. Это может вызвать проблемы, так как новые версии GCC могут требовать функций, которые не поддерживаются в старых компиляторах. Поскольку вы уже имеете GCC, возможно, стоит рассмотреть установку GCC 7.4.0 через альтернативные методы, либо через предустановленные пакеты, либо используя более новую версию компилятора.
-
Отсутствие необходимых файлов: Ошибка
exec 'cc1': execvp: No such file or directory
может означать, что система не может найти компонентcc1
, который является частью GCC. Это может быть результатом неправильной установки или конфигурации компилятора. -
Ошибки конфигурации: Неправильные или некорректные флаги в команде конфигурации могут привести к сбоям.
Предложенные решения
-
Установка предкомпилированного пакета: Если у вас нет доступа к правам администратора, вы можете попробовать установить предкомпилированные пакеты, которые можно установить в ваш домашний каталог. Это избавит вас от необходимости собирать компилятор из исходников.
-
Проверка путей и системных переменных:
- Убедитесь, что переменные окружения, такие как
PATH
, корректно настроены и включают пути к установленным версиям компилятора. - Проверьте, что вы не имеете конфликтующих версий GCC в вашей системе.
- Убедитесь, что переменные окружения, такие как
-
Использование
update-alternatives
: Если у вас есть несколько установленных версий компилятора, вы можете использоватьupdate-alternatives
для выбора, какая версия будет использоваться по умолчанию. -
Пробный запуск: Попробуйте запустить конфигурацию без дополнительных флагов, чтобы изолировать проблему:
../configure --prefix=/home/xxx/gcc-7.4.0
-
Установка всех необходимых зависимостей: Возможно, вам недоставало каких-либо зависимостей для сборки. Убедитесь, что все необходимые библиотеки и файлы установлены.
-
Переустановка GCC 4.9: Если предыдущие шаги не помогли, можете рассмотреть возможность переустановки GCC 4.9 для устранения возможных поврежденных файлов.
Заключение
Ошибки компиляции с GCC часто могут быть вызваны конфликтами версий, отсутствием файлов или библиотек и неправильной конфигурацией. Используйте описанные выше методы для устранения проблемы. Если ошибка продолжает возникать, желательно также обратиться за помощью на специализированные форумы или сообщества, такие как Stack Overflow, предоставив полные логи и описание шагов, которые вы предприняли.