Gcc

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