本文尚在实验阶段,系统环境是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.

 

By charlie

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注