ошибки при компиляции с gcc

Вопрос или проблема

Я использую 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, и использовать её вместо этого.

ИЗМЕНЕНИЕ.

  1. Вы можете попробовать установить предварительно скомпилированный gcc-7.4.0 только для своего пользователя, 1, 2, YMMV.

Рекомендации и другие заметки:

  1. Установите обе версии для всей системы. Затем используйте update-alternatives, чтобы выбрать, какая версия будет использоваться по умолчанию. На самом деле это часто делается автоматически в процессе установки, и вы можете позже изменить свой выбор через update-alternatives, см. это.

    Также вы можете выбрать, какую версию использовать для каждого пользователя, как здесь.
    Это гораздо проще, чем то, что вы пытаетесь сделать, и сделает обе версии доступными для всех пользователей.

  2. Если у вас есть какие-либо причины все еще предпочитать ваш метод (было бы полезно, если бы вы указали свои причины, другие также могут предоставить дополнительные идеи), я предлагаю вам следовать этому (с подходящим номером версии). Похоже, вы пропустили/изменили часть из этого.
    Например, типичное расположение – это --prefix=/home/xxx/gcc-<version>, а не --prefix=/home/xxx/bin. Независимо от того, является ли это причиной проблем, я предлагаю сначала начать с перечисленных команд, и если это сработает, тогда начните добавлять флаги configure по мере необходимости.

  3. Вы можете рассмотреть возможность установки предварительно скомпилированных пакетов для необходимых пакетов, вместо ./contrib/download_prerequisites, как описано здесь.

  4. Пожалуйста, разместите точную команду, которую вы использовали для “уже установленного gcc-4.9 под root” (пожалуйста, потратьте 30 секунд на это).
    Установка “под root” – это не то, что вы обычно хотите делать.

  5. Я бы сначала воспользовался предложениями, вместо того чтобы пытаться выяснить, почему вы получили свои ошибки.
    Просто чтобы предоставить несколько указателей на возможные причины (не буду углубляться в это):

    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

Эти сообщения указывают на то, что ваша операционная система не может создать исполняемый файл, вероятно, из-за неправильной конфигурации среды или недостающих компонентов.

Причины возникновения ошибок

  1. Использование старой версии GCC: Вы пытаетесь использовать GCC 4.9.3 для сборки GCC 7.4.0. Это может вызвать проблемы, так как новые версии GCC могут требовать функций, которые не поддерживаются в старых компиляторах. Поскольку вы уже имеете GCC, возможно, стоит рассмотреть установку GCC 7.4.0 через альтернативные методы, либо через предустановленные пакеты, либо используя более новую версию компилятора.

  2. Отсутствие необходимых файлов: Ошибка exec 'cc1': execvp: No such file or directory может означать, что система не может найти компонент cc1, который является частью GCC. Это может быть результатом неправильной установки или конфигурации компилятора.

  3. Ошибки конфигурации: Неправильные или некорректные флаги в команде конфигурации могут привести к сбоям.

Предложенные решения

  1. Установка предкомпилированного пакета: Если у вас нет доступа к правам администратора, вы можете попробовать установить предкомпилированные пакеты, которые можно установить в ваш домашний каталог. Это избавит вас от необходимости собирать компилятор из исходников.

  2. Проверка путей и системных переменных:

    • Убедитесь, что переменные окружения, такие как PATH, корректно настроены и включают пути к установленным версиям компилятора.
    • Проверьте, что вы не имеете конфликтующих версий GCC в вашей системе.
  3. Использование update-alternatives: Если у вас есть несколько установленных версий компилятора, вы можете использовать update-alternatives для выбора, какая версия будет использоваться по умолчанию.

  4. Пробный запуск: Попробуйте запустить конфигурацию без дополнительных флагов, чтобы изолировать проблему:

    ../configure --prefix=/home/xxx/gcc-7.4.0
  5. Установка всех необходимых зависимостей: Возможно, вам недоставало каких-либо зависимостей для сборки. Убедитесь, что все необходимые библиотеки и файлы установлены.

  6. Переустановка GCC 4.9: Если предыдущие шаги не помогли, можете рассмотреть возможность переустановки GCC 4.9 для устранения возможных поврежденных файлов.

Заключение

Ошибки компиляции с GCC часто могут быть вызваны конфликтами версий, отсутствием файлов или библиотек и неправильной конфигурацией. Используйте описанные выше методы для устранения проблемы. Если ошибка продолжает возникать, желательно также обратиться за помощью на специализированные форумы или сообщества, такие как Stack Overflow, предоставив полные логи и описание шагов, которые вы предприняли.

Оцените материал
Добавить комментарий

Капча загружается...