本文主要是介绍C++三方库编译之GCC11.3.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本系列准备持续更新,目的是将网上开源的三方库的编译过程与步骤,无脑展示,内容纯执行脚本与代码,不讲原理,也不科普库。
三方库编译很简单的(三板斧:configure+make+install),为啥还需要整理?需要的!
- 一,三方库很多都是自动安装到系统里的,可这并不是我们所需,而且还可能没权限,或者与系统版本冲突,引发其他问题,所以,最好自定义目录。
- 二,三方库本身可能会依赖其他库,而且是内置的,而实际已有,或与所需的其他库版本冲突,需要重新链接与包含,而本步骤,全指明。
- 三,库里的有些参数,相当隐晦,不设置用不了,或是实际常用的参数,里面不提供,与其这样,倒不如直接提供。
- 四,部分三方库还有缺陷,比如不同gcc编译的支持,比如代码or编译文件中写死的路径;比如风险函数的告警,等,需要细微改进。
如此,希望所需的同行们,直接copy即可。
话不多说,本篇是如何升级到GCC11.3.0(前提,机器有低版本的可用的gcc),需要的按照步骤执行即可(如果是脚本命令的话)
gcc与c++版本
GCC支持C++特性说明: C++ compiler support - cppreference.com
GCC各个版本官网下载:GCC, the GNU Compiler Collection- GNU Project
下载GCC与依赖库
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.xz
wget https://mirrors.ustc.edu.cn/gnu/gmp/gmp-4.3.2.tar.bz2
wget https://mirrors.ustc.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.bz2
wget https://mirrors.ustc.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
设置编译变量
gcc_verson=11.3.0
gcc_name=gcc-$gcc_verson
gmp_name=gmp-4.3.2
mpfr_name=mpfr-3.1.4
mpc_name=mpc-1.0.3
dir_package=$(pwd)
dir_install=$(pwd)/$gcc_name-full-install
#rm -fr $dir_install
编译 $gmp_name
mkdir -p $dir_install/$gmp_name
cd $dir_package && rm -fr $gmp_name
tar -xjf $gmp_name.tar.bz2
cd $gmp_name
./configure --prefix=$dir_install/$gmp_name
make clean && make -j$(nproc) && make install
编译 $mpfr_name
mkdir -p $dir_install/$mpfr_name
cd $dir_package && rm -fr $mpfr_name
tar -xjf $mpfr_name.tar.bz2
cd $mpfr_name
./configure --prefix=$dir_install/$mpfr_name --with-gmp=$dir_install/$gmp_name
make clean && make -j$(nproc) && make install
编译 $mpc_name
mkdir -p $dir_install/$mpc_name
cd $dir_package && rm -fr $mpc_name
tar -xzvf $mpc_name.tar.gz
cd $mpc_name
./configure --prefix=$dir_install/$mpc_name --with-gmp=$dir_install/$gmp_name --with-mpfr=$dir_install/$mpfr_name
make clean && make -j$(nproc) && make install
编译 $gcc_name
export LD_LIBRARY_PATH=$dir_install/$gmp_name/lib:$dir_install/$mpfr_name/lib:$dir_install/$mpc_name/lib:$LD_LIBRARY_PATH
mkdir -p $dir_install/$gcc_name
cd $dir_package && rm -fr $gcc_name
tar -xf $gcc_name.tar.xz
cd $gcc_name
./configure --prefix=$dir_install/$gcc_name --with-gmp=$dir_install/$gmp_name --with-mpfr=$dir_install/$mpfr_name --with-mpc=$dir_install/$mpc_name --enable-threads=posix --disable-checking --enable--long-long --disable-multilib --enable-languages=c,c++ --disable-libstdcxx-pch
make clean && make -j$(nproc) && make install
配置运行时的环境变量
gcc_env_sh=$gcc_name.env.sh
echo 'gcc_base=$(cd $(dirname $BASH_SOURCE) && pwd )' > $dir_install/$gcc_env_sh
echo "gcc_verson=$gcc_verson" >> $dir_install/$gcc_env_sh
echo "gcc_home=\$gcc_base/$gcc_name" >> $dir_install/$gcc_env_sh
echo "gmp_home=\$gcc_base/$gmp_name" >> $dir_install/$gcc_env_sh
echo "mpfr_home=\$gcc_base/$mpfr_name" >> $dir_install/$gcc_env_sh
echo "mpc_home=\$gcc_base/$mpc_name" >> $dir_install/$gcc_env_sh
echo '' >> $dir_install/$gcc_env_sh
echo 'export CC=$gcc_home/bin/gcc' >> $dir_install/$gcc_env_sh
echo 'export CXX=$gcc_home/bin/g++' >> $dir_install/$gcc_env_sh
echo 'alias gcc=$gcc_home/bin/gcc' >> $dir_install/$gcc_env_sh
echo 'alias g++=$gcc_home/bin/g++' >> $dir_install/$gcc_env_sh
echo '' >> $dir_install/$gcc_env_sh
echo 'if [[ -z "$C_INCLUDE_PATH" ]];then' >> $dir_install/$gcc_env_sh
echo ' export C_INCLUDE_PATH=$gcc_home/include/c++/$gcc_verson:$gcc_home/include/c++/$gcc_verson/x86_64-pc-linux-gnu:/usr/include:/usr/include:/usr/local/include' >> $dir_install/$gcc_env_sh
echo 'else' >> $dir_install/$gcc_env_sh >> $dir_install/$gcc_env_sh
echo ' export C_INCLUDE_PATH=$gcc_home/include/c++/$gcc_verson:$gcc_home/include/c++/$gcc_verson/x86_64-pc-linux-gnu:$C_INCLUDE_PATH' >> $dir_install/$gcc_env_sh
echo 'fi' >> $dir_install/$gcc_env_sh >> $dir_install/$gcc_env_sh
echo 'if [[ -z "$CPLUS_INCLUDE_PATH" ]];then' >> $dir_install/$gcc_env_sh
echo ' export CPLUS_INCLUDE_PATH=$gcc_home/include/c++/$gcc_verson:$gcc_home/include/c++/$gcc_verson/x86_64-pc-linux-gnu:/usr/include:/usr/include:/usr/local/include' >> $dir_install/$gcc_env_sh
echo 'else' >> $dir_install/$gcc_env_sh
echo ' export CPLUS_INCLUDE_PATH=$gcc_home/include/c++/$gcc_verson:$gcc_home/include/c++/$gcc_verson/x86_64-pc-linux-gnu:$CPLUS_INCLUDE_PATH' >> $dir_install/$gcc_env_sh
echo 'fi' >> $dir_install/$gcc_env_sh
echo 'if [[ -z "$LD_LIBRARY_PATH" ]];then' >> $dir_install/$gcc_env_sh
echo ' export LD_LIBRARY_PATH=$gmp_home/lib:$mpfr_home/lib:$mpc_home/lib:$gcc_home/lib:$gcc_home/lib64:$gcc_home/libexec/gcc/x86_64-pc-linux-gnu/$gcc_verson' >> $dir_install/$gcc_env_sh
echo 'else' >> $dir_install/$gcc_env_sh
echo ' export LD_LIBRARY_PATH=$gmp_home/lib:$mpfr_home/lib:$mpc_home/lib:$gcc_home/lib:$gcc_home/lib64:$gcc_home/libexec/gcc/x86_64-pc-linux-gnu/$gcc_verson:$LD_LIBRARY_PATH' >> $dir_install/$gcc_env_sh
echo 'fi' >> $dir_install/$gcc_env_sh
echo 'if [[ -z "$PATH" ]];then' >> $dir_install/$gcc_env_sh
echo ' export PATH=$gcc_home/bin' >> $dir_install/$gcc_env_sh
echo 'else' >> $dir_install/$gcc_env_sh
echo ' export PATH=$gcc_home/bin:$PATH' >> $dir_install/$gcc_env_sh
echo 'fi' >> $dir_install/$gcc_env_sh
echo 'echo "----current gcc info:"' >> $dir_install/$gcc_env_sh
echo 'echo "----gcc:$gcc_home/bin/gcc"' >> $dir_install/$gcc_env_sh
echo 'echo "----g++:$gcc_home/bin/g++"' >> $dir_install/$gcc_env_sh
echo '' >> $dir_install/$gcc_env_sh
打包
package_name=$(basename $dir_install )
cd $dir_install/..
tar czf $package_name.tar.gz $package_name
使用
- 加载环境变量:source $dir_install/$gcc_env_sh
- 查看当前版本:gcc --version (打印)
- 添加编译参数:-std=c++20 or add_compile_options(-std=c++20)
这篇关于C++三方库编译之GCC11.3.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!