gcc5.4编译源码

xzkjgw 2020-05-08

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 <signal.h>即可

相关推荐