我正在尝试在 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
在 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——真正的 GCC,而不是伪装的
clang
?
请注意,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
.
另见(越来越旧的帖子):
对于 macOs 请按照以下步骤操作:
方法一
使用 homebrew 安装 gcc 编译器。 (如果你还没有安装homebrew)
brew install gcc
假设 brew 在您的系统上安装了 gcc-12 版本,检查使用:
gcc-12 --version
打开终端并使用以下命令:
cd /opt/homebrew/bin
下面给出的命令将为 g++ 与 g++-12 建立符号链接。使用它,您可以轻松地在不同版本之间切换
ln -s gcc-12 gcc
现在检查
gcc --version
,它会从macOs default clang 更改为gcc。
方法二(创建别名)
打开终端并打开 .zprofile 或 .zshrc 文件
open .zprofile
打开文件后添加以下行,保存并关闭它。
alias gcc="gcc-13"
alias g++="g++-13"
重启终端,仅使用 gcc 或 g++
即可正常工作注意: 您也可以执行相同的步骤来更改 g++,只需将
gcc-12
替换为 g++-12
编辑:也许那时你会看到这个答案 brew 安装最新的 gcc 或 g++ 版本,如 gcc-13 等,所以一定要相应地修改命令。