c++ - 从源代码 : bash: gcc -v/usr/bin/gcc: Is a directory 安装 gcc

标签 c++ gcc g++

我刚刚使用这些步骤从源代码安装了 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 -8gcc-8.1).

当您使用 update-alternatives 将 GCC 二进制文件设置为 /usr/bin/gcc-8.1 时,您设置了通常用于解析哪个 GCC 二进制文件的符号链接(symbolic link)你想要一个目录 - 导致你现在得到的错误。

要解决此问题,请按照以下步骤操作:

  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 或类似的东西重新编译和重新安装可能会更好,只需根据需要修改路径

关于c++ - 从源代码 : bash: gcc -v/usr/bin/gcc: Is a directory 安装 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315730/

相关文章:

c++ - 无法从 'auto' 推断出 'tuple_cat'

c++ - g++-带有-O选项的浮点行为不是严格的C++11标准保形?

linux - 需要一个简单的 Linux C++ IDE (Android NDK)

c++ - 无法使用 CVC4 C++ API 编译代码

c++ - boost::variant 的问题,链接器给出段错误

c++ - main 不能为空

C++:从头开始实现归并排序

c++ - 删除时会调用模板参数的模板类的析构函数吗?

linux - 在 Debian 上链接依赖于位置的程序集

macos - MacOSX 上的 g++ 不适用于 -arch ppc64