GCC: Homebrew 安装 GCC 和 Binutils

文章背景

前段时间, 有个博客上面的小伙伴给我发来邮件, 问我关于 GCC 相关的知识, 对于 GCC 我也只是略懂皮毛, 于是回复他的时候, 也很粗略的说了一通.

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

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

最后告诉他, 我会坚持把自己以前学习过相关 GCC 的知识, 以博客的形式输出.

于是, 就有了 GCC: 系列 的文章. 希望能够帮到大家.

概要

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

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

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, 可以参考 维基百科.

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

brew tap homebrew/versions
brew install gcc49

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

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

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

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

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

/usr/local/Cellar/gcc49/4.9.2_1

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

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

可以看到:

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 可以参考 维基百科.

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

brew install binutils

同理:

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

可以看到你需要的工具:

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 上面无法使用.

所以在 MacOS 上面编译一些 C文件, 有时候需要走一些弯路, 但是不得不承认 LLVM 是比较优秀的编译器.

GCC 系列博文

坚持原创技术分享,您的支持将鼓励我继续创作!