【问题标题】:OSX - replace gcc version 4.2.1 with 4.9 installed via HomebrewOSX - 用通过 Homebrew 安装的 4.9 替换 gcc 版本 4.2.1
【发布时间】:2015-05-12 07:36:16
【问题描述】:

这已经困扰我一段时间了。我正在尝试编译一个巨大的 C++ 文件(我知道它可以在我的 Arch Linux 计算机上正常工作)。当我在我的 Mac 上检查我的 GCC 版本时,它返回以下内容

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

我还使用 Homebrew 安装了最新的 GCC 版本

brew install gcc49

我现在的问题是如何将新安装的 GCC 版本应用为终端使用的默认版本?

我还知道,当您使用 homebrew 安装 gcc 时,它会将其命名为 gcc-49,这样包之间就不会混淆。

我不知道如何用我安装的 4.9 版本替换 XCode 附带的 4.2.1 版本。

谢谢

编辑: 切换到我的mac获取gcc --version的完整return语句

编辑 2: 我在这里的最终目的是能够导航到目录并能够输入

make
sudo make install

安装已创建的守护程序。现在,随机包和标准库会返回大量错误

【问题讨论】:

  • 未选中,但我猜你只是运行 /usr/local/bin/gcc 并确保 /usr/local/bin 靠近 PATH 的开头。
  • 不完全确定这意味着什么。我对 mac 终端以及如何用它做任何事情都非常陌生。如果这对您意味着什么,我添加了这个 echo "PATH=\"/usr/local/bin:$PATH\"" > ~/.bash_profile
  • 试试/usr/local/bin/gcc --version
  • 试试gcc-4.9 --version
  • 很好,你们现在都在工作。如果您希望简单的命令gcc 调用您的 gcc-4.9,请执行此操作 cd /usr/local/bin; ls gcc,如果没有任何显示,您可以执行此操作 ln -s gcc-4.9 gcc,这将成为您的默认 gcc。

标签: c++ macos gcc homebrew


【解决方案1】:

默认情况下,homebrew 将其安装的软件包的可执行文件(二进制文件)放置在 /usr/local/bin 中 - 当您考虑它时,对于本地用户安装的二进制文件来说,这是一个非常明智的位置 - 与 /bin 相比,它包含属于核心操作系统的标准化二进制文件。因此,您的brew 命令应该已将gcc-4.9 安装到/usr/local/bin 中。现在的问题是如何使用它……您有多种选择。

选项 1

如果你今天和明天只想编译一两件东西,然后可能不再使用编译器,你不妨调用homebrew安装的gcc,完整路径如下:

/usr/local/bin/gcc-4.9 --version

选项 2

如果您要经常使用gcc,每次显式输入完整路径会有点烦人,因此您可以将以下内容放入您的~/.bash_profile

export PATH=/usr/local/bin:$PATH

然后启动一个新终端,它会知道它需要查看/usr/local/bin,因此您只需输入即可逃脱

gcc-4.9 --version

选项 3

如果你只是想使用gcc来调用编译器,而不用担心实际版本,你可以做上面的选项2,另外创建一个这样的符号链接

cd /usr/local/bin
ln -s  gcc-4.9  gcc

这将允许您运行homebrew-安装的gcc,只需在命令行中键入gcc,就像这样

gcc --version

注意:

如果你以后想安装,比如gcc-4.13 或类似的,你会像以前一样做你的brew install,然后像这样更改符号链接:

cd /usr/local/bin
rm gcc               # remove old link from gcc to gcc-4.9
ln -s gcc-4.13 gcc   # make new link from gcc to gcc-4.13

请注意,如果您实际使用的是C++ 而不是C,则需要将上述内容调整为g++ 代替gcc。

【讨论】:

  • 设置符号链接后,我建议关闭终端并打开一个新的,然后编写 gcc -v。 Mac osx 在旧的终端窗口中显示没有任何变化。
  • MacOS Catalina 上不是.zshrc 或.zprofile 吗?
  • 我必须为 g++ 做同样的事情来解决我的问题
  • @Mathy 好主意 - 我最初回答 gcc 和 C 但我猜人们可能同样在寻找 g++ 和 C++ 所以我在最后添加了一条注释。谢谢。
【解决方案2】:

仅将 ~/.bash_profile 中 $PATH 的顺序更新为 brew 安装版本 'export PATH=/usr/local/Cellar/gcc/5.1.0/bin:$PATH' 不足以为我进行切换

在 ~./bash_profile (alias gcc='gcc-5') 中更改别名有效,但可能会造成混淆,即 which gcc 将返回 Clang 版本

对我有用的是在 brew gcc 目录中创建一个符号链接并更新路径(上面的第 1 点)

cd /usr/local/Cellar/gcc/5.1.0/bin/gcc
ln -s gcc-5 gcc

现在 which gcc 返回正确的 5.1.0 版本

【讨论】:

    【解决方案3】:

    下载 gcc 二进制文件解压并将 bin、lib 包含共享和 libexec 文件复制到 /usr 目录,然后键入 gcc --version 这就是我希望你看到的

    gcc --version gcc (GCC) 4.9.2 20141029(预发布) 版权所有 (C) 2014 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有 保修单;甚至不考虑适销性或特定用途的适用性。

    【讨论】:

    • 这是一个非常危险的建议,你不应该在 /usr 中随意丢弃一些东西,虽然我从来没有从二进制文件(总是从源代码)安装 gcc 和朋友,但我希望有一些一种将东西放在正确位置并正确设置各种符号链接等的安装程序。
    【解决方案4】:

    OS X 没有安装 GCC(4.2.1 或其他)。 Clang 是默认的系统编译器,并且已经有一段时间了。当作为 GCC 调用时,它使用 4.2.1 中的 C++ 头文件。您是否尝试过使用 Clang 本地编译代码,而不是调用“gcc”(调用 Clang)?与 GCC 仿真模式相比,它具有更现代的标头和 C++ 支持。

    【讨论】:

    • 我没有,只是因为 Makefile 是在我之前创建的并且是为 GCC 设置的。正如@MarkSetchell 所说,问题的解决方案最终是cd /usr/local/bin ln -s gcc-4.9 gcc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多