如何确保我的默认 C/C++ 编译器是 GCC

问题描述 投票:0回答:2

我正在尝试在 macOS 上从源代码安装 Riak(https://docs.riak.com/riak/kv/2.2.3/setup/installing/mac-osx.1.html#installing-from-source ).

有备注:

Riak 不会用 Clang 编译。请确保您的默认设置 C/C++ 编译器是 GCC

如何找出默认编译器以及如何更改它?

macOS Catalina (10.15.4),which 命令打印:

$ which clang
/usr/bin/clang
$ which gcc
/usr/bin/gcc
c++ macos gcc clang riak
2个回答
9
投票

在 macOS Catalina(以及之前的版本,很可能还有后续版本)上,问题有两个方面和一些建议的解决方案。

make
默认使用的编译器名称是什么?

$ mkdir junk
$ cd junk
$ > x.cpp
$ > y.c
$ make x y
c++     x.cpp   -o x
cc     y.c   -o y
$ cd ..
$ rm -fr junk

这表明

make
使用的名字是
cc
c++
。那些显然不是
clang
clang++
,但也不是明显的
gcc
g++
.

$ which cc c++
/usr/bin/cc
/usr/bin/c++
$

它到底是哪个编译器?

哪个编译器真正存在于名称

cc
c++
gcc
g++
clang
clang++
之后?我们可以通过让它们识别它们的版本来检查它们到底是哪个编译器:

$ for compiler in cc c++ gcc g++ clang clang++
> do
>     which $compiler
>     $compiler --version
> done
/usr/bin/cc
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/c++
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/gcc
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/g++
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/clang
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/clang++
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$

可以看到,

/usr/bin
安装的版本都是同一个编译器,那个编译器是
clang
或者
clang++
.

这是在装有 macOS Mojave 10.14.6 和 XCode 11.3.1 的机器上运行的。最新版本的 XCode — 11.4.1 — 仅在 Catalina 上可用。然而,一般的结论是一样的——所有的 C 和 C++ 编译器实际上都是

clang
clang++
的伪装。

如何将 GNU GCC 安装到您的机器上?

如何在您的机器上获得真正的 GNU GCC——真正的 GCC,而不是伪装的

clang

  • 使用 Brew 安装 GCC(我没有检查哪个版本的 GCC 是最新的)。
  • 或者使用 MacPorts(同样,我没有检查哪个版本的 GCC 是最新的)。
  • 如果您喜欢冒险,请自己动手(但我还没有成功地在 Catalina 上构建 GCC 9.3.0;我有一个基于 macOS Mojave 10.14.x 构建的 GCC 9.2.0,但它在 Catalina 上运行良好——有一个定位标头所需的环境变量)。
  • 也许 Fink — 它列出了 2020 年可用的 GCC 8.4;我不知道更新的版本。

请注意,Apple 已采取隐藏系统头文件的方式(不是在

/usr/include
中 - 您无法修改文件系统的那部分以将符号链接添加到他们隐藏它们的位置):

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

(你是说你猜不到?我也猜不到!)

如何更改默认编译器?

一旦你在适当的地方安装了 GCC,你需要确保你使用的是“真正的”GCC 而不是

/usr/bin
中的“假的”。您可以通过确保“真正的”GCC 的 bin 目录在
/usr/bin
之前出现在您的 PATH 上来部分做到这一点。我在
/opt/gcc/v9.3.0
下安装了 GCC 9.3.0,所以
/opt/gcc/v9.3.0/bin
早在
/usr/bin
出现之前就出现在我的路径上。

您还需要确保

riak
(您正在安装的软件)的配置使用正确的编译器。如果有
./configure
脚本,请使用为编译器指定的正确路径运行它。例如,我可能会使用:

./configure CC=/opt/gcc/v9.3.0/bin/gcc CXX=/opt/gcc/v9.3.0/bin/g++

您还可以将这些值设置为环境变量。

如果它使用

cmake
或其他一些配置包,您需要查阅安装说明。这通常是
README
或有时是
INSTALL
.


另见(越来越旧的帖子):


1
投票

对于 macOs 请按照以下步骤操作:

方法一

  1. 使用 homebrew 安装 gcc 编译器。 (如果你还没有安装homebrew

     brew install gcc
    
  2. 假设 brew 在您的系统上安装了 gcc-12 版本,检查使用:

      gcc-12 --version
    
  3. 打开终端并使用以下命令:

       cd /opt/homebrew/bin
    
  4. 下面给出的命令将为 g++ 与 g++-12 建立符号链接。使用它,您可以轻松地在不同版本之间切换

       ln -s gcc-12 gcc
    

现在检查

gcc --version
,它会从macOs default clang 更改为gcc。

方法二(创建别名)

  1. 打开终端并打开 .zprofile.zshrc 文件

    open .zprofile
    
  2. 打开文件后添加以下行,保存并关闭它。

    alias gcc="gcc-13"
    alias g++="g++-13"
    
  3. 重启终端,仅使用 gccg++

    即可正常工作

注意: 您也可以执行相同的步骤来更改 g++,只需将

gcc-12
替换为
g++-12

编辑:也许那时你会看到这个答案 brew 安装最新的 gccg++ 版本,如 gcc-13 等,所以一定要相应地修改命令。

  • 2023 年 5 月 5 日: 现在,默认情况下 brew 安装最新的 gcc-13 版本,因此请相应地使用上述命令。
© www.soinside.com 2019 - 2024. All rights reserved.