2KB项目,专业的源码交易网站 帮助 收藏 每日签到

在 OS X 下编译 GCC

  • 时间:2019-01-23 18:38 编辑:2KB 来源:2KB.COM 阅读:351
  • 扫一扫,手机访问
  • 分享
摘要:
GCC Mac OS X 英文原文:Compiling GCC on 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

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部