Mac OS X 10.11源码安装GCC 5.1.0

1、环境

宿主:Mac OS X 10.11

安装目标:GCC 5.1.0,手册下载

第三方依赖库: gmp 6.1.0mpfr 3.1.4mpc 1.0.3

2、前提

执行

xcode-select --install

下载Mac OS X Command Line Tools,安装完毕后/usr/include会有下载好的头文件,不执行此步骤会在后续的gcc编译过程中找不到在/usr/include下的系统头文件。

3、第三方依赖库安装

顺序:gmp->mpfr->mpc

过程:./configure->make->make check->sudo make install

编译安装完后,库文件放置在/usr/local/lib,头文件放置在/usr/local/include

4、编译安装GCC

./configure 确保上述步骤执行没用问题

make 这个过程耗时一个小时,结果最后还是出错了,错误如下

-fgnu-runtime  -fno-common -DPIC -o .libs/NXConstStr.o
/var/tmp//ccc9efWx.s:98:17: error: non-local symbol required in directive
       .no_dead_strip L_OBJC_Module
                      ^
make: *** [NXConstStr.lo] Error 1

搜索发现这是一个bug,新版本的苦又来了,幸好官方已经给了解决方案。

bug list

patch

修改gcc-5.1.0/gcc/config/darwin.c文件中的darwin_mark_decl_preserved方法。

make clean 重新编译。

结果又踩雷一次,编译到与Java运行时库链编时报错

natArray.s:2047:2: error: ambiguous instructions require an explicit suffix (could be 'filds', or 'fildl')
       fild    14(%esp)
       ^

This issue can be reproduced with the attached natArray.s assembly file using the command...

as -arch i386 -force_cpusubtype_ALL -o natArray.o natArray.s

还是一个bug,按照bug patch修复configure文件还是不能编译通过,最后无奈添加忽略Java语言,

运行./configure  --enabled-languages=ada, c, c++, fortran, go, jit, lto, objc, obj-c++

重新运行 make dist-clean&make继续。

经过一个多小时后编译完成,sudo make install 大功告成。

后期测试发现gcc 5.3.0没有上述问题,可以考虑安装。