GCC: Homebrew 安装 GCC 和 Binutils

文章背景

前段时间,有个博客上面的小伙伴给我发来邮件,问我关于 GCC 相关的知识,对于 GCC 我也只是凭着之前的了解,回复他了。书到用时方恨少呀!

这位小伙伴还在读大学,自学能力比较强,自己出了完成课时之外,还会在网上找资料自学。

我记得自己在大学的时候,对 GCC 一窍不通,只知道 Turbo-C 和那些被强制记住的关键字。

最后告诉他, 我会坚持把自己以前学习过相关 GCC 的知识,以博客的形式输出。于是。就有了 GCC 系列 的文章,希望能够帮到大家。

概要

这篇博客主要分享 macOS 下安装 GCC 和 Binutils 工具。

macOS 终端下输入 gcc -v, 其实是链接指向了 LLVM 编译器, 不是 GNU 的 GCC.

1
2
3
4
5
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.37)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

安装 GCC

关于 GCC, 可以参考 维基百科.

执行下面命令, 即可开始安装:

1
brew tap homebrew/versions

然后搜索 gcc

1
brew search gcc

搜索结果中会显示 gcc 的版本,可以选择安装一个,建议安装最新版。

这里以安装 gcc49 为例。

1
brew install gcc49

brew 会自动为你安装相关依赖,如 gmp4、mpfr2、libmpc08、isl011、cloog018.

这里安装需要等待一段时间…

看到下面的内容, 表示安装完毕.

1
2
3
Pouring gcc49-4.9.2_1.yosemite.bottle.1.tar.gz
/usr/local/Cellar/gcc49/4.9.2_1: 1138 files, 164M

安装成功后, 安装目录在:

1
/usr/local/Cellar/gcc49/4.9.2_1

你在终端直接输入 gcc -v,其实还是 LLVM,那么如何使用我们 刚安装的 gcc?

1
2
3
cd /usr/local/Cellar/gcc49/4.9.2_1/bin
ls -l

可以看到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
c++-4.9
cpp-4.9
g++-4.9
gcc-4.9
gcc-ar-4.9
gcc-nm-4.9
gcc-ranlib-4.9
gcov-4.9
x86_64-apple-darwin14.3.0-c++-4.9
x86_64-apple-darwin14.3.0-g++-4.9
x86_64-apple-darwin14.3.0-gcc-4.9
x86_64-apple-darwin14.3.0-gcc-4.9.2
x86_64-apple-darwin14.3.0-gcc-ar-4.9
x86_64-apple-darwin14.3.0-gcc-nm-4.9
x86_64-apple-darwin14.3.0-gcc-ranlib-4.9

Ok,你应该明白了, 在命令行输入 gcc-4.9 -v 就可以使用我们刚安装的 GCC 了,包括 g++ 等工具.

以后使用 GNU 的 GCC 输入 gcc-4.9 就好了。

安装 Binutils

关于 Binutils 可以参考 维基百科.

执行下面命令, 直接安装:

1
brew install binutils

同理:

1
cd /usr/local/Cellar/binutils/2.25/bin

可以看到你需要的工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
gaddr2line
gar
gc++filt
gcoffdump
gdlltool
gdllwrap
gelfedit
gnlmconv
gnm
gobjcopy
gobjdump
granlib
greadelf
gsize
gsrconv
gstrings
gstrip
gsysdump
gwindmc
gwindres

个人感受

在 macOS 上面,即使安装了 GNU 的 GCC,也没有在 Linux 上面用的那么爽,很多 GCC 的命令选项在 macOS 上面无法使用,但不得不承认 LLVM 是比较优秀的编译器。

遇到问题

gcc-4.9 编译代码报错,报错内容如下:

1
2
3
4
main.c:9:19: fatal error: stdio.h: No such file or directory
#include <stdio.h>
^
compilation terminated.

卸载 gcc 重新安装最新版本的 gcc 即可,如果你不知道最新的 gcc 版本是哪个,可以 search 一下。

1
brew search gcc

显示结果大致如下:

1
2
3
4
5
6
gcc
gcc@5
gcc@7
gcc@4.9
gcc@6
i386-elf-gcc

这里以安装 gcc@7 为例,命令如下:

1
2
3
4
5
// 卸载原来的
brew uninstall gcc
// 安装最新版本
brew install gcc@7

GCC 系列博文

GCC: 编译 C 语言的流程

GCC: Homebrew 安装 GCC 和 Binutils

GCC: 共享库

GCC: 静态库


扫码关注,你我就各多一个朋友~

坚持原创技术分享!