linux编译gcc源码,gcc5.4编译源码(示例代码)

1. 下载源码

wget http://mirrors.kernel.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz

2. 解压

sudo tar -xvf gcc-5.4.0.tar.gz

3. 下载编译所需依赖项:

cd gcc-5.4.0

sudo ./contrib/download_prerequisites  //下载依赖项,只能在此目录下执行

cd ..

4.  建立编译输出目录

sudo mkdir gcc-build-5.4.0

5. 进入输出目录,执行以下命令,并生成makefile文件

cd gcc-build-5.4.0

sudo ../gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

6. 编译

sudo make -j4

(若编译出错且没有报错信息,使用sudo make编译,此处时间较长)

7. 安装

sudo make install

8. 检查版本

gcc --version

附编译报错信息:

1. 报错:configure: error: in `/usr/local/src/gcc-5.4.0/build‘:

解决:缺少gcc需要先安装一个任意gcc版本

2. 报错:dereferencing pointer to incomplete type ‘struct ucontext‘

解决:将61行左右struct ucontext * uc_ = context->cfa

改成  struct ucontext_t * uc_ = context->cfa

3. 报错:/sanitizer_stoptheworld_linux_libcdep.cc:237:22:

error: aggregate ‘sigaltstack handler_stack‘ has incomplete type and cannot be defined struct sigaltstack   handler_stack;

解决:将/sanitizer_stoptheworld_linux_libcdep.cc中第237行

struct sigaltstack handler_stack;

修改为:stack_t handler_stack;

4. 报错:……// sanitizer_linux.h

解决:将第二行注释

struct link_map;  // Opaque type returned by dlopen().

struct sigaltstack;

将 uptr internal_sigaltstack(const struct sigaltstack* ss, struct sigaltstack* oss);

修改为:uptr internal_sigaltstack(const void* ss, void* oss);

5. 报错:……// sanitizer_linux.cc

将uptr internal_sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss)

修改为:uptr internal_sigaltstack(const void *ss, void *oss)

6. 报错:……// sanitizer_stoptheworld_linux_libcdep.cc

将struct sigaltstack handler_stack;

修改为: stack_t handler_stack;

7. 报错:……//tsan_platform_linux.cc

将res_state *statp = (__res_state*)state;

修改为:struct __res_state *statp = (struct __res_state*)state;

8. 报错:……// asan_linux.cc

解决:在asan_linux.cc中添加头文件#include 即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值