在 OS X 下编译 GCC 已翻译 100%

oschina 投递于 2013/12/25 07:23 (共 6 段, 翻译完成于 12-25)
阅读 9246
收藏 54
3
加载中

在这篇文档里,我将向你介绍如何在你的OS X计算机上使用Graphite循环优化从源代码编译、安装目前稳定版本的GCC。这篇文档中的指令都是在Xcode 4.6.4和 Mountain Lion(OS X 10.8.4)下测试通过的。

OS X默认的编译器Clang仅仅支持C,C++和Objective-C。比如,假设你对现代的Fortran编译器感兴趣,那么你就需要与GCC一起的gfortran。让最新稳定版的GCC运行在你的Mac上的另一个理由是这个编译器可以为你提供另一个C和C++编译器选择。使用两个不同的编译器对你的代码进行测试一直以来都是很好的想法。

为了对GCC源代码进行编译,你需要有一个可以运行的C++编译器,请你优先选择旧版本的GCC。在这篇文档的其余部分里,我假设你已经安装了Xcode的命令行工具。在我写这篇文档的时候,Apple的命令行工具里包含llvm-gcc-4.2。

几点人
翻译于 2013/12/25 13:17
1

让我们开始从GUN的互联网站点下载最新稳定版本的GCC,进入http://gcc.gnu.org/mirrors.html,然后下载gcc-4.8.1.tar.bz2。我已经把这个压缩包保存在我的Downloads文件夹里了。

为了成功的构建gcc,我们还需要三个其他的库: mpc mpfr gmp 。使用上面的链接,然后下载这三个库的最新版本:gmp-5.1.2.tar.bz2

mpc-1.0.1.tar.gz和mpfr-3.1.2.tar.bz2,仍旧把它们保存在Downloads文件夹下。

为了启用Graphite循环优化,你还需要另外两个库,进入ftp://gcc.gnu.org/pub/gcc/infrastructure/,下载isl-0.11.1.tar.bz2和cloog-0.18.0.tar.gz。

解压Downloads文件夹下这六个压缩包,然后打开一个终端窗口。

几点人
翻译于 2013/12/25 13:28
1

我们将从编译gmp库开始:

cd Downloads
cd gmp*

在编译器保存已编译库的文件夹里创建一个名字为build的文件夹:

mkdir build && cd build

现在,到了令人高兴的部分了......在终端输入:

../configure --prefix=/usr/gcc-4.8.1 --enable-cxx

如果你没有看到任何错误,那么你实际上可以编译gmp库了:

make -j 4

几分钟后,你将对gmp库完成编译。如果你没有看到任何错误......那么祝贺你,你准备好安装gmp库到/usr/gcc-4.8.1/文件夹下( 要完成安装,你需要管理员密码):

sudo make install

现在我们对MPFR库做同样的操作:

cd ..
cd ..
cd mpfr*
mkdir build && cd build

配置阶段:

../configure --prefix=/usr/gcc-4.8.1 --with-gmp=/usr/gcc-4.8.1

第二个参数只是告诉配置应用gmp已经安装到/usr/gcc-4.8.1下

配置阶段结束后,我们就可以构建和安装这个库了:

make -j 4
sudo make install

接下来,我们将构建MPC:

cd ..
cd ..
cd mpc*
mkdir build && cd build
../configure --prefix=/usr/gcc-4.8.1 --with-gmp=/usr/gcc-4.8.1 --with-mpfr=/usr/gcc-4.8.1
make -j 4
sudo make install

此时,你应该已经完成了GCC必须的库的构建和安装了。

下一步就是构建Graphite循环优化所需要的库:

cd ..
cd ..
cd isl*
mkdir build && cd build
../configure --prefix=/usr/gcc-4.8.1 --with-gmp-prefix=/usr/gcc-4.8.1
make -j 4
sudo make install

cd ..
cd ..
cd cloog*
mkdir build && cd build
../configure --prefix=/usr/gcc-4.8.1 --with-gmp-prefix=/usr/gcc-4.8.1 --with-isl-prefix=/usr/gcc-4.8.1
make -j 4
sudo make install

几点人
翻译于 2013/12/25 13:50
1

现在,我们准备编译GCC。我们要有这样的思想准备:在某些机器上,编译可能要花一个多小时......由于我只对C、C++和Fortran编译器感兴趣,因此下面就是我在我的机器上所使用的配置命令:

../configure --prefix=/usr/gcc-4.8.1 --enable-checking=release --with-gmp=/usr/gcc-4.8.1 --with-mpfr=/usr/gcc-4.8.1 --with-mpc=/usr/gcc-4.8.1 --enable-languages=c,c++,fortran --with-isl=/usr/gcc-4.8.1 --with-cloog=/usr/gcc-4.8.1 --program-suffix=-4.8.1
make -j 4
sudo make install

上面的命令指导着我们在安装gmp、mpfr、mpc、ppl和 cloog库时使用过的配置应用。另外,这个配置命令还告诉你在所有最终的 执行程序的前面增加一个前缀,比如,假设你要调用的是GCC 4.8.1,那么你就书写成gcc-4.8.1,gcc命令将调用的是Apple内置 的编译器gcc 4.2。

如果你想构建GCC包里的其他编译器,那么请修改--enable-languages配置选项。

几点人
翻译于 2013/12/25 14:10
1

接下来,最后一次键入:

make -j 4

喝咖啡、也许是看书,接着就是等待......根据计算机配置的不同,这个过程大概可能需要一个小时......或者更多......,而且 构建文件夹需要占用大约2GB的磁盘空间。

安装编译好的gcc到/usr/gcc-4.8.1下:

sudo make install

现在,你已经让新编译器完全独立于Apple本身的gcc编译器了,如果你要使用新编译器,那么只要在终端输入下面命令,修改路径就行:

export PATH=/usr/gcc-4.8.1/bin:$PATH

如果你不想每次打开终端输入上面命令,那么就把上面的命令保存到你的用户目录下的.bash_profile文件里。

你应该能调用任何新编译的编译器: C 、C++ Fortran......,在终端输入下面命令,就可以轻松地调用g++了:

g++-4.8.1 test.cpp -o test

记住:如果你打算释放一些磁盘空间,请删除Downloads下的build目录。

几点人
翻译于 2013/12/25 14:57
1

让我们看一下g++-4.8.1是否可以编译C++11的某些特性。在你比较喜欢的文本编辑器里,拷贝、保存下面的测试程序(我假设你把这个文件保存在你自己的用户目录里):

//这个程序用来测试新增的C++11 Lambda语法和初始化列表
 and initalizer lists
#include <iostream>
#include <vector>

using namespace std;

int main()
{
  // lambda测试
  cout << [](int m, int n) { return m + n;} (2,4) << endl;

  //测试的循环要用到的初始化列表和范围
  vector<int> V({1,2,3});

  cout << "V =" << endl;
  for(auto e : V) {
    cout << e << endl;
  }

  return 0;
}

编译,运行上面的lambda例程:

g++-4.8.1 -std=c++11 tst_lambda.cpp -o tst_lambda
./tst_lambda
6
V =
1
2
3

我们还可以使用C++11里新增的thread头文件编译C++代码:

//由主程序创建C++11线程

#include <iostream>
#include <thread>

//线程将调用的函数
void call_from_thread() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    //启动线程
    std::thread t1(call_from_thread);

    //把线程连接到主线程
    t1.join();
    
    return 0;
}

如果你是Frotran开发人员,那么你可以使用像gfortran-4.8.1中do councurrent这样Fortran 2008才具有的一些功能:

integer,parameter::mm=100000
real::a(mm), b(mm)
real::fact=0.5

! initialize the arrays
! ...

do concurrent (i = 1 : mm)
    a(i) = a(i) + b(i)
enddo

end

上面的代码可以使用下面命令编译(假设你命名上面的文件为tst_concurrent_do.f90):

gfortran-4.8.1 tst_concurrent_do.f90 -o tst_concurrent_do
./tst_concurrent_do

几点人
翻译于 2013/12/25 14:39
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(30)

guobosheng
guobosheng
让我们开始从GUN的互联网站点下载最新稳定版本的GCC

“GUN”应该是“GNU”
l
liantong
关于藏文手机需要字库和字的编码能否提供,我找的好辛苦,没有.受累联系liushengle2008@163.com. 谢谢
osc_699222
osc_699222

引用来自“majin-buuuuu”的评论

引用来自“铂金小黑”的评论

引用来自“majin-buuuuu”的评论

引用来自“铂金小黑”的评论

真够折腾的。。。人生大把时间就浪费在折腾上了!!


brew install gcc48

呵呵,所以你还是现在的你。

呵呵,你能牛逼到什么层次 除了显摆一下折腾的过程 还能牛逼点么

以为打个“呵呵”就显得自己豁达了?
我就是比你牛逼。
呵呵。
毫不客气。
另外,别回了,别浪费我时间。

他就是一个喷子,不学无术四处乱喷乱射
铂金小白

引用来自“majin-buuuuu”的评论

引用来自“铂金小黑”的评论

引用来自“majin-buuuuu”的评论

引用来自“铂金小黑”的评论

真够折腾的。。。人生大把时间就浪费在折腾上了!!


brew install gcc48

呵呵,所以你还是现在的你。

呵呵,你能牛逼到什么层次 除了显摆一下折腾的过程 还能牛逼点么

以为打个“呵呵”就显得自己豁达了?
我就是比你牛逼。
呵呵。
毫不客气。
另外,别回了,别浪费我时间。

装逼 ! 太装逼了! 一看就是水货一个 还装!!
Raymin
Raymin
不到万不得已,不这样折腾。
这样浪费时间,性价比太低。
xpsair
xpsair

引用来自“Jason___”的评论

引用来自“Neo”的评论

引用来自“撸蕉香的程猿序”的评论

引用来自“Jason___”的评论

引用来自“xpsair”的评论

呃……首先的有个MAC电脑……

Mac还是性价比比较高的 且比较便宜

亮了

这个还真是,要有差不多的做工的一般笔记本一般都不比mac便宜,拿sony vaio pro 13跟macbook air 13比就是了。

我就是这个意思 程序员要在自己的工具上面花钱 相比PC比较好的 没有一个比苹果便宜 所以 不要拿3-4K的笔记本说事 程序员选笔记本的目的 不只是用1年吧 我手里的Mac用了两年 2012年买的 现在如果觉得慢 换16G的内存 换SSD 又能折腾一两年 而且丝毫没看着旧

mac pro、mac air还是mac mini呢?一点奖学金全砸山地车上了……一直想用MAC,唉……
一木四水
折腾。编译过了又能咋样? 汇编懂了? 词法分析懂了?语法分析也懂了? 不过是个编译也值得炫一下?
IT写轮眼
IT写轮眼
brew tap homebrew/versions
brew edit gcc48

就可以看到一个 ruby 文件, 描述 homebrew 是如何编译 gcc4.8的了, 以及相关依赖的(用类似的命令查看 brew edit <depends name>), 打了哪些 patch 等等信息.
老帖子
macport?
易界灰
易界灰

引用来自“netstu_”的评论

引用来自“铂金小黑”的评论

引用来自“majin-buuuuu”的评论

引用来自“铂金小黑”的评论

真够折腾的。。。人生大把时间就浪费在折腾上了!!


brew install gcc48

呵呵,所以你还是现在的你。

呵呵,你能牛逼到什么层次 除了显摆一下折腾的过程 还能牛逼点么

我来吐槽一下:)
二楼如果不是故意装,那么我觉得这种方式是好的,因为只有不断的深入底层,才能获得更多的知识,我们大多数人都只是利用了工具的最表层,虽然方便了,但没学到东西,以后想装也没可能了。

我觉得这是一个过程。新手开始先只应用,后面对内部实现感兴趣开始折腾,折腾完发现不折腾,直接使用才是最好的。
返回顶部
顶部