本文尚在实验阶段,系统环境是fedora23,gcc版本是5.1.1
1、下载gcc源码
https://gcc.gnu.org/releases.html
2、编译参数:
./configure --prefix=/usr/local/gcc-4.1.2 --enable-language=c,c++ --enable-thread=posix --host=x86_64-redhat-linux
host一定要加,这样编译的时候就会少很多跟系统无关的内容,也会消掉很多不兼容的错误。
3、编译过程的麻烦事
I 提示重复定义,主要是c89跟c99对extend inline 跟 inline的解释不一样,所以注释掉头文件的定义。gun对此有一篇说明 https://gcc.gnu.org/ml/gcc-patches/2007-02/msg00119.html
II 提示找不到头文件gnu/stubs-32.h,安装glibc 32位版本。
dnf install glibc-devel.i686
III 报头文件定义不完整, linux-unwind.h:141: error: field ‘info’ has incomplete type 。修改这个文件,根据http://pastebin.com/VkgE27Pd 提供的修改方案。
--- a/gcc/config/i386/linux-unwind.h 2011-01-03 20:52:22.000000000 +0000 +++ b/gcc/config/i386/linux-unwind.h 2012-07-06 12:23:51.562859470 +0100 @@ -133,9 +133,9 @@ { struct rt_sigframe { int sig; - struct siginfo *pinfo; + siginfo_t *pinfo; void *puc; - struct siginfo info; + siginfo_t info; struct ucontext uc; } *rt_ = context->cfa; /* The void * cast is necessary to avoid an aliasing warning.