软件下载
在清华镜像站:https://mirrors.tuna.tsinghua.edu.cn/下载
gcc-5.4.0.tar.gz,解压tar -xzvf gcc-5.4.0.tar.gz
gmp-6.1.2.tar.bz2,解压tar -xjvf gmp-6.1.2.tar.bz2
mpc-1.1.0.tar.gz,解压tar -xzvf mpc-1.1.0.tar.gz
mpfr-4.0.2.tar.gz,解压tar -xzvf mpfr-4.0.2.tar.gz
环境预装
yum install gcc automake autoconf libtool make gcc-c++
#安装gmp
cd gmp-6.1.2
./configure --prefix=/usr/local/gmp
make && make install
#安装mpfr
cd mpfr-4.0.2
./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
make && make install
#安装mpc
cd mpc-1.1.0
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make && make install
安装gcc
cd gcc-5.4.0
./configure --prefix=/usr/local/gcc5.4 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp/lib/:/usr/local/mpfr/lib/:/usr/local/mpc/lib/
make && make install
使用gcc
ln -sf /usr/local/gcc5.4/bin/c++ /usr/bin/c++
ln -sf /usr/local/gcc5.4/bin/g++ /usr/bin/g++
ln -sf /usr/local/gcc5.4/bin/gcc /usr/bin/gcc
export LD_LIBRARY_PATH=/usr/local/gcc5.4/lib64:/usr/local/gmp/lib/:/usr/local/mpfr/lib/:/usr/local/mpc/lib/:$LD_LIBRARY_PATH
或者是使用系统命令update-alternatives管理,update-alternatives是系统中专门维护命令链接符的工具。
#其中40,50,70是优先级,越高越有限,--slave能保证gcc和g++保持相同的版本
#第一个/usr/bin/gcc表示软链接,第二个gcc表示简称,第三个/usr/bin/gcc-4.8表示真实路径
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --config gcc#查看已经配置好的gcc链接,输入编号选择不同的gcc版本
update-alternatives --remove gcc /usr/bin/gcc-4.8 #删除gcc链接
arm上编译出现的问题
编译时报错:
./md-unwind-support.h:55:21: error: field ‘uc’ has incomplete type
struct ucontext uc;
这个是因为ucontext在定义时是这样的
struct ucontext
{
...
} ucontext_t;
所以改动方式就是将55行:struct ucontext uc; 改成struct ucontext_t uc;
编译时报错:
./libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:146:23: fatal error: sys/ustat.h: No such file or directory
参考链接:解决方法
编译时报错:
/libsanitizer/asan/asan_linux.cc:222:20: error: ‘SIGSEGV’ was not declared in this scope
给文件asan_linux.cc添加头文件 #include <signal.h>