如何确保我的缺省C/C++编译器是GCC

v9tzhpje  于 2023-03-08  发布在  C/C++
关注(0)|答案(2)|浏览(237)

我正在尝试从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 clang
/usr/bin/clang
$ which gcc
/usr/bin/gcc
niknxzdl

niknxzdl1#

在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使用的名称是ccc++,它们不明显是clangclang++,但也不明显是gccg++

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

到底是哪个编译器?

名称ccc++gccg++clangclang++的背后到底是哪个编译器?我们可以通过让它们标识版本来检查它们到底是哪个编译器:

$ 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中的版本都是相同的编译器,该编译器是clangclang++
这是在一台装有macOS莫哈韦10.14.6和XCode 11.3.1的机器上运行的。最新版本的XCode - 11.4.1 -只在 Catalina 上可用。然而,总的结论是一样的-所有的C和C++编译器实际上都是伪装的clangclang++

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

如何将真实的的GNU GCC(真正的GCC,而不是伪装的clang)安装到您的机器上?

  • 使用Brew安装GCC(我没有检查GCC的当前版本)。
  • 或者使用MacPorts(同样,我没有检查GCC的当前版本)。
  • 如果你喜欢冒险,那就自己动手吧(但是我还没有在 Catalina 上成功地构建GCC9.3.0;我有一个在macOS莫哈韦10.14.x上构建的GCC 9.2.0,它在 Catalina 上工作正常--需要一个环境变量来定位标头)。
  • 也许是Fink--它将GCC 8.4列为2020年可用;我不知道更新的版本。

请注意,苹果已经采取了隐藏系统头文件英里以外的方式(不是在/usr/include-你不能修改文件系统的这一部分,以添加一个符号链接到他们已经隐藏他们):

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

(You我的意思是你猜不到?我也是!)

如何更改默认编译器?

一旦你在适当的地方安装了GCC,你需要确保你使用的是“真实的的”GCC,而不是/usr/bin中的“假的”。你可以通过确保“真正的”GCC的bin目录出现在你的路径中/usr/bin之前来做到这一点。我在/opt/gcc/v9.3.0下安装了GCC 9.3.0,所以/opt/gcc/v9.3.0/bin早于/usr/bin出现在我的PATH中。
您还需要确保riak(您正在安装的软件)的配置使用正确的编译器。如果有./configure脚本,请使用为编译器指定的正确路径运行它。例如,我可能用途:

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

也可以将这些值设置为环境变量。
如果它使用cmake或其他配置包,你需要参考安装说明,通常是README,有时是INSTALL
另见(职位越老):

n6lpvg4x

n6lpvg4x2#

对于 macOs,请执行以下步骤:
1.使用homebrew安装gcc编译器如果尚未安装,请使用命令:

brew install gcc

1.假设brew在您的系统上安装了gcc-12版本,请使用以下命令进行检查:

gcc-12 --version

1.打开终端并使用以下命令:

cd /opt/homebrew/bin

1.下面给出的命令将为g与g-12建立一个符号链接。使用此命令,您可以轻松地在不同版本之间切换

ln -s gcc-12 gcc

现在检查gcc --version,它将从macOs的默认clang更改为gcc。

**注意:**您也可以执行相同的步骤来更改g++,只需将gcc-12替换为g++-12即可
**PS:**也可能在那个时候你会看到这个答案brew安装一些最新的gcc或g++版本,如gcc-13等,所以请确保相应地修改命令。

相关问题