开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
在 OS X 下编译 GCC - 技术翻译 - 开源中国社区

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

英文原文:Compiling GCC on OS X
标签: GCC Mac OS X
oschina 推荐于 4年前 (共 6 段, 翻译完成于 12-25) 评论 30
收藏  
53
推荐标签: GCC Mac OS X 待读

在这篇文档里,我将向你介绍如何在你的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。

几点人
 翻译得不错哦!

让我们开始从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文件夹下这六个压缩包,然后打开一个终端窗口。

几点人
 翻译得不错哦!

我们将从编译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

几点人
 翻译得不错哦!

现在,我们准备编译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配置选项。

几点人
 翻译得不错哦!

接下来,最后一次键入:

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目录。

几点人
 翻译得不错哦!

让我们看一下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

几点人
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(30)
Ctrl/CMD+Enter

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


brew install gcc48

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

引用来自“xpsair”的评论

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

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

引用来自“Jason___”的评论

引用来自“xpsair”的评论

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

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

亮了

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

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


brew install gcc48

呵呵,所以你还是现在的你。
我有mac pro。

引用来自“xpsair”的评论

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

+1 呵呵

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

引用来自“Jason___”的评论

引用来自“xpsair”的评论

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

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

亮了

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

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

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

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


brew install gcc48

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

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

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

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

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


brew install gcc48

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

呵呵,你能牛逼到什么层次 除了显摆一下折腾的过程 还能牛逼点么
最烦各种编译,我只要exe
发现挺无聊的,比方说用gcc重写gcc,再用这个gcc再重写gcc,如此没完没了。再或者,用asm重写个asm,再用这个asm再重写asm,还是没完没了。这就是技术大牛。
都喷完了就出来搬砖了

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

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

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

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


brew install gcc48

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

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

初学者都是喜欢编译,真正的为了时间金钱人力都用预编译,谁tm不浪费时间在编译上谁tm才是牛逼

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

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

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

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


brew install gcc48

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

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

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

引用来自“Neo”的评论

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

引用来自“Jason___”的评论

引用来自“xpsair”的评论

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

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

亮了

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

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

引用来自“壮哉我大东北”的评论

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

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

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

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


brew install gcc48

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

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

初学者都是喜欢编译,真正的为了时间金钱人力都用预编译,谁tm不浪费时间在编译上谁tm才是牛逼

其实啊,编译这些东西就应该交给CI系统来做,组建自己的工作流就好

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

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

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

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


brew install gcc48

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

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

以为打个“呵呵”就显得自己豁达了?
我就是比你牛逼。
呵呵。
毫不客气。
另外,别回了,别浪费我时间。
评论出现了两个分支~还会更多么?

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

引用来自“Jason___”的评论

引用来自“xpsair”的评论

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

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

亮了

屌丝无钱IT男飘过
顶部