我刚刚使用这些步骤从源代码安装了 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-alternatives
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
最佳答案
--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
).
当您使用 update-alternatives
将 GCC 二进制文件设置为 /usr/bin/gcc-8.1
时,您设置了通常用于解析哪个 GCC 二进制文件的符号链接(symbolic link)你想要一个目录 - 导致你现在得到的错误。
要解决此问题,请按照以下步骤操作:
删除
update-alternatives
中的错误条目:update-alternatives --remove gcc /usr/bin/gcc-8.1
添加正确的条目。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
或类似的东西重新编译和重新安装可能会更好,只需根据需要修改路径
关于c++ - 从源代码 : bash: gcc -v/usr/bin/gcc: Is a directory 安装 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315730/