не может пересмотреть версию gcc даже после установки новой и удаления старой - PullRequest
0 голосов
/ 27 октября 2018

Я работаю на CentOS 5.5, и мой компьютер до сих пор использовал gcc-4.1.2, а под /usr/lib/gcc/x86_64-redhat-linux/ было 2 индекса: 4.1.1 и 4.1.2.Для использования некоторых программ я должен обновить gcc.

Но после того, как я установил gcc-4.7.0 с загруженного gcc-4.7.0.tar.gz (я не использовал yum, потому что, когда я пробовал все серверы,сказал мне, что у меня последняя версия, которая, конечно, не соответствует действительности, и, возможно, это также было вызвано проблемой, с которой я сейчас сталкиваюсь), /usr/lib/gcc/x86_64-redhat-linux/4.7.0/ был создан точно так же, как индексы 4.1.1 и 4.1.2, поэтому в разделе /usr/lib/gcc/x86_64-redhat-linux/ было 3 индекса: 4.1.1, 4.1.2 и 4.7.0.И под /usr/lib/gcc/x86_64-redhat-linux/4.7.0/ было 6 индексов:

bin include lib lib64 libexex share

Похоже, что 4.7.0 был успешно установлен, но когда я запустил

gcc --version

, результат все еще был

gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Я также побежал

update-alternatives --install /usr/bin/gcc gcc /usr/lib/gcc/x86_64-redhat-linux/4.7.0 40

, чтобы поднять приоритет 4.7.0, и когда я побежал

update-alternatives --config gcc

, он сказал

There is 1 program that provides 'gcc'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/gcc/x86_64-redhat-linux/4.7.0

Enter to keep the current selection[+], or type selection number:

И я напечатал 1, все выглядело так, как будто 4.7.0 был выбран в качестве gcc по умолчанию, но когда я запустил gcc --version, результат не изменился!Все еще 4.1.2.

После этого я даже удалил все 4.1.2 gcc и связанные с ним программы rpm -e и удалил индекс, но результат gcc --version стал

-bash: gcc: command not found.

Это не изменилось, когда я переустановил 4.7.0.

В конце концов, когда я искал ссылки /usr/bin/gcc/, я нашел

/usr/bin/gcc -> /etc/alternatives/gcc

и ссылку /etc/alternatives/gccбыло

/etc/alternatives/gcc -> /usr/lib/gcc/x86_64-redhat-linux/4.7.0

это должно быть результатом моего запуска строки update-alternatives, так что это сработало.Сделал ссылку на 4.7.0.Так почему же эта ссылка не позвонила в конце 4.7.0?Я не могу выяснить.

Я даже сделал прямую ссылку на 4.7.0 тогда:

ln -s /usr/lib/gcc/x86_64-redhat-linux/4.7.0 /usr/bin/gcc

однако это все еще не работало.

Яочень смущен этим.Буду благодарен за вашу помощь.Большое спасибо!

ps. Большое спасибо Басиле Старинкевичу за то, что он заметил, что я дал следующие объяснения:

  1. У меня есть /usr/bin/ в моем ПУТИ, так что это должно бытьОК.

  2. Мне кажется, что /usr/bin/gcc/ должен быть связан с исполняемым файлом, но не с индексом, поэтому ссылка на 4.7.0 неверна.Но может ли кто-нибудь сказать мне, на какой исполняемый файл ссылаться или с каким /usr/bin/ связан обычный компьютер?Скорее всего, это может привести к решению проблемы.

  3. Я не могу запустить configure еще раз, потому что сам configure требует gcc, но теперь он не найден.Поэтому я боюсь, что проблема не может быть решена этим.

1 Ответ

0 голосов
/ 27 октября 2018

Помните о PATH переменной .В нем может быть $HOME/bin/.

Восстановите gcc вашей системы (поэтому отмените весь беспорядок, который вы сделали).Затем запустите which gcc и gcc -v, чтобы понять, что именно.

Если вы компилируете GCC из его исходного кода (как , распространяемый FSF),выберите последнюю версию, например, GCC 8 осенью 2018 года.

Внимательно прочитайте о установке GCC .Скомпилируйте его вне исходного кода.Помните о многих параметрах configure .Я предлагаю рассмотреть возможность его настройки с некоторым параметром --program-suffix (например, --program-suffix=-8), а затем соответствующим образом добавить символические ссылки (например, $HOME/bin/gcc -> /usr/local/bin/gcc-8).

ln -s / usr/lib/gcc/x86_64-redhat-linux/4.7.0 / usr / bin / gcc

это неправильно.Поскольку /usr/lib/gcc/x86_64-redhat-linux/4.7.0/ является некоторым внутренним каталогом, а /usr/bin/gcc должен быть исполняемым файлом.

Возможно, вам не нужно запускать update-alternatives, но вам нужно что-то добавить (хитро) в каталогупоминается в вашем PATH

См. также этот ответ на аналогичный вопрос.

после правок в вопросе

Сначала вам нужно чтобы убрать беспорядок , который вы сделали в /usr/ (в частности, в /usr/bin/, который вы никогда не должны менять без вашей системы пакетов).Удалите все, что вы добавили в /usr/bin/ и /usr/lib/.Затем переустановите принудительно и явно соответствующие системные gcc пакеты (используя yum или какой-либо другой менеджер пакетов).

У меня есть / usr / bin / в моем PATH, так что все должно быть в порядке.

Вероятно, нет.Я рекомендую иметь $HOME/bin/ и /usr/local/bin/ рано в вашем PATH (так что до /usr/bin/; вам может потребоваться отредактировать ~/.bashrc, чтобы изменить PATH настройки) и добавить свой новый gcc, например, gcc-8 (если вы компилируете GCC 8 из его исходного кода), там.Если вам нужна общесистемная установка, используйте программу /usr/local/bin/gcc-8.Если вам нужна личная установка, используйте программу $HOME/bin/gcc-8 (обе могут быть абсолютными символическими ссылками куда-то еще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...