Gcc

Ling Yu
Ling Yu

Centos下编译安装gcc

cd /opt
mkdir app && cd app
wget https://mirrors.cloud.tencent.com/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz
tar -zxvf gcc-13.2.0.tar.gz
mv gcc-13.2.0 gcc-13
cd gcc-13

下载依赖包

./contrib/download_prerequisites
wget https://mirrors.cloud.tencent.com/gnu/gmp/gmp-6.2.1.tar.bz2
wget https://mirrors.cloud.tencent.com/gnu/mpfr/mpfr-4.1.0.tar.bz2
wget https://mirrors.cloud.tencent.com/gnu/mpc/mpc-1.2.1.tar.gz
wget https://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/isl-0.24.tar.bz2

配置

./contrib/download_prerequisites
mkdir build && cd build
../configure -v --prefix=/usr/local/gcc-14.1.0/ --enable-checking=release --enable-threads=posix --enable-languages=c,c++ --enable-default-pie --enable-shared --enable-plugin --enable-bootstrap --enable-link-mutex --enable-link-serialization --disable-multilib --program-suffix=-14 --with-system-zlib --with-target-system-zlib=auto --with-abi=m64 --with-pkgversion='Built by Ling Yu' --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
 
../configure -v --prefix=/usr/local/gcc-14.1.0/ --enable-checking=release --enable-threads=posix --enable-languages=c,c++ --enable-default-pie --enable-shared --enable-plugin --enable-bootstrap --enable-link-mutex --enable-link-serialization --disable-multilib --program-suffix=-14 --with-target-system-zlib=auto --with-abi=m64 --with-pkgversion='Built by Ling Yu' --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu

configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。其中--prefix选项是配置安装的路径。

如果不配置 --prefix 选项,安装后:

可执行文件默认放在/usr/local/bin,

库文件默认放在/usr/local/lib,

配置文件默认放在/usr/local/etc,

其它的资源文件放在/usr/local/share

configure各项参数详解:

  • --prefix=/usr/local/gcc-13.2.0/:把所有资源文件都放在该路径下。

  • --enable-checking=release:生成的编译器在编译过程中不做额外检查。

  • --enable-languages=c,c++:让gcc支持c,c++。

  • --disable-multilib:不生成编译为其他平台可执行代码的交叉编译器。

  • --host: 运行平台

  • --build: 编译平台

  • --target: 运行平台生成的代码平台

无误后

make -j$(nproc) \
          BOOT_CFLAGS='-O3' BOOT_CXXFLAGS='-O3' \
          CFLAGS_FOR_TARGET='-O3' CXXFLAGS_FOR_TARGET='-O3' \
          CFLAGS_FOR_BUILD='-O3' CXXFLAGS_FOR_BUILD='-O3' \
          CFLAGS='-O3' CXXFLAGS='-O3' \
          LIBCFLAGS='-O3'

或者

make -j$(nproc) # 或make -jx x为cpu核数
sudo make install
ll /usr/local/gcc-13.2.0

配置

如果找不到libmpfr的链接库,则先执行如下命令

export LD_LIBRARY_PATH=/usr/local/mpfr-4.1.0/lib

5 备份旧版gcc

cd /usr/bin
mv gcc gcc48
mv g++ g++48
mv c++ c++48

还有些旧版文件

建立新版本软连接

ln -s /usr/local/gcc-14.1.0/bin/gcc-14 /usr/bin/gcc
ln -s /usr/local/gcc-14.1.0/bin/g++-14 /usr/bin/g++
ln -s /usr/local/gcc-11.2.0/bin/c++-14 /usr/bin/c++

7 更新libstdc

方法一

cd /usr/lib64
mv libstdc++.so.6 libstdc++.so.6.back
ln -s /usr/local/gcc-14.1.0/lib64/libstdc++.so.6.0.29 libstdc++.so.6
ln -s /usr/local/gcc-14.1.0/lib64/libstdc++.so.6  /usr/lib64/libstdc++.so.6

方法二

ln -snf /usr/local/gcc-14.1.0/lib64/libstdc++.so.6.0.29 libstdc++.so.6

方法三

cp /usr/local/gcc-14.1.0/lib64/libstdc++.so.6.0.29 libstdc++.so.6

比较库差异

strings /usr/local/gcc-14.1.0/lib64/libstdc++.so.6.0.29 | grep GLIBCXX

修改环境变量

echo export LD_LIBRARY_PATH=/usr/local/gcc-14.1.0/lib:/usr/local/gcc-14.1.0/lib64:$LD_LIBRARY_PATH >> /etc/profile
 
source /etc/profile

多版本配置

通过update-alternatives建立文件关联,首先要让系统知道我们安装了多个版本的gcc

# 命令最后的 20和50是优先级,如果使用auto选择模式,系统将默认使用优先级高的
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 20
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50

Ubuntu下安装多版本GCC

1 安装准备

add-apt-repository ppa:ubuntu-toolchain-r/test # 添加相应源
apt update #更新软件源

2 安装

安装最新版gcc或指定版本gcc

apt install gcc-11

3.刷新db用locate查看已安装gcc

locate 用来查找文件或目录。比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db ,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,有时会找到已经被删除的数据,而刚刚建立文件却无法查找到。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库,然后再查找。

sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"

4.多版本配置

通过update-alternatives建立文件关联,首先要让系统知道我们安装了多个版本的gcc

# 命令最后的 20和50是优先级,如果使用auto选择模式,系统将默认使用优先级高的
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50