Установите gcc из исходного кода: bash: gcc -v / usr / bin / gcc: каталог - PullRequest
0 голосов
/ 13 мая 2018

Я только что установил gcc-8.1 из источника, используя следующие шаги:

wget https://ftp.gnu.org/gnu/gcc/gcc-8.1.0/gcc-8.1.0.tar.gz
tar xvf gcc-8.1.0.tar.gz
cd gcc-8.1.0
apt build-dep gcc
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-8.1.0/configure --prefix=/usr/bin/gcc-8.1 --enable-languages=c,c++,fortran,go --disable-multilib
make -j8
make install

Все правильно?

Затем я добавляю его в update-альтернативы

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8.1 60 --slave /usr/bin/g++ g++ /usr/bin/g++-8.1


There are 3 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-7     60        auto mode
  1            /usr/bin/gcc-5     60        manual mode
* 2            /usr/bin/gcc-7     60        manual mode
  3            /usr/bin/gcc-8.1   60        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/gcc-8.1 to provide /usr/bin/gcc (gcc) in manual mode
update-alternatives: warning: skip creation of /usr/bin/g++ because associated file /usr/bin/g++-8.1 (of link group gcc) doesn't exist

Моя проблема, когда я набираю gcc -v, он сказал bash: /usr/bin/gcc: Is a directory

1 Ответ

0 голосов
/ 13 мая 2018

--prefix=/usr/bin/gcc-8.1 означает, что все , являющееся частью установки, будет помещено в каталог /usr/bin/gcc-8.1/. 1

Это означает, что ваш фактический двоичный файл GCC, вероятно, находится в /usr/bin/gcc-8.1/bin/gcc (или в некотором исполняемом файле с аналогичным именем, возможно, он на самом деле называется gcc-8 или gcc-8.1).

Когда вы устанавливаете двоичный файл GCC на /usr/bin/gcc-8.1, используя update-alternatives, вы устанавливаете символическую ссылку, которая обычно используется для разрешения того, какой двоичный файл GCC вы хотите поместить в каталог, что приводит к ошибке, которую вы сейчас получаете.

Чтобы устранить эту проблему, выполните следующие действия:

  1. Удалить неправильную запись в update-alternatives:

    update-alternatives --remove gcc /usr/bin/gcc-8.1
    
  2. Добавьте правильную запись. 2

    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8.1/bin/gcc 60 \
                        --slave   /usr/bin/g++ g++ /usr/bin/gcc-8.1/bin/g++
    

1 Ну, в основном, в любом случае. Обычные префиксы включают / (двоичные файлы в /bin/), /usr/ (двоичные файлы в /usr/bin/) и /usr/local/ (двоичные файлы в /usr/local/bin/)

2 Я предполагаю, что вы хотите оставить GCC установленным в этом неудобном месте. Перекомпиляция и переустановка с --prefix=/opt/gcc-8.1 или чем-то подобным, вероятно, будет лучше, просто измените путь по мере необходимости

...