本文记录了在麒麟V10体系下,编译安装高版本的GCC/G++编译器(GCC 10、GCC 13)和LLVM Clang编译器的方法,对体系没有影响,不必要root权限,可随时切换本身编译的高版本GCC、Clang和体系默认环境。
1.背景
麒麟V10体系自带的GCC/G++编译器版本是7.3.0,这个编译器支持了C++17尺度,基本上已经够用了,但是有些比较新的软件,大概必要高版本的GCC/G++才气编译。因此必要升级编译器版本,但是我又不敢直接替换体系编译器,否则谁知道体系会出啥幺蛾子,因此就要用非入侵的方法升级。
由于自带的GCC 7版本老,想一步到GCC 13估计有点难,只能一步一步的自举了。正常来说,自举应该是7->8->9->10->11->12->13的次序,但是要知道,编译GCC但是大工程,没那么多时间折腾,因此我偷了个懒,7->10->13,自举两次成功了。先用体系自带的GCC 7编译出GCC 10,再用GCC 10编译出GCC 13。
$ gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/7.3.0/lto-wrapper
目标:x86_64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-7.3.0/obj-x86_64-linux-gnu/isl-install --without-cloog --enable-gnu-indirect-function --build=x86_64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --with-tune=generic --with-arch_32=x86-64 --disable-multilib
线程模型:posix
gcc 版本 7.3.0 (GCC)
2.下载源码
从 https://ftp.gnu.org/gnu/gcc/ 网站上可以下载必要的GCC源码,这里我下载了 gcc-10.5.0.tar.xz 和 gcc-13.3.0.tar.xz 文件。之后解压源码包,源码包里有个下载依赖库的脚本,要先实行下载依赖的脚本,下载完成后,才气开始编译。下载的内容不多,网络通常的话,很快。
- $ tar -xvJf gcc-10.5.0.tar.xz
- $ cd gcc-10.5.0
- $ ./contrib/download_prerequisites #这里就是支持下载依赖的脚本。留意日志,如果失败了,要重试
复制代码
3.编译
首先,确保体系的GCC 7可以正常编译步调,然后,再确认上面的步骤里,下载依赖库都成功了,编译GCC就很轻易了。
留意一点,由于不替换体系编译器,所以,我们在配置的时间,要把GCC的安装目录,修改到本身的用户目录$HOME/opt/gcc-10下,之后的GCC就放在这里了。
- $ cd gcc-10.5.0
- $ mkdir build && cd build
- $ ../configure --prefix=$HOME/opt/gcc-10 --enable-languages=c,c++,fortran,go --disable-multilib
- $ make #亲测,这里最好就一个线程编译。如果加了-j参数指定多线程编译,经常出问题,稳妥起见,单线程吧,就是等的久一点。
- $ make install
复制代码
4.使用编译器
如今GCC 10已经编译出来,并存放在$HOME/opt/gcc-10目录下,但是还不能直接使用,必要设置环境。在$HOME/opt/gcc-10目录下新建enable文件,并给予可实行权限,写入以下内容:
- #这个是GCC目录存放的路径,要根据自己的存放路径情况进行修改!!!
- export MAIN_PATH=$HOME/opt/gcc-10
- export PATH=${MAIN_PATH}/bin${PATH:+:${PATH}}
- export MANPATH=${MAIN_PATH}/share/man:${MANPATH}
- export INFOPATH=${MAIN_PATH}/share/info${INFOPATH:+:${INFOPATH}}
- export PCP_DIR=${MAIN_PATH}
- export LD_LIBRARY_PATH=${MAIN_PATH}/lib64:{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
- export PKG_CONFIG_PATH=${MAIN_PATH}/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
复制代码 这样,即可通过$HOME/opt/gcc-10/enable文件,来激活环境。打开一个终端,默认都是体系的环境,只要实行一下"source $HOME/opt/gcc-10/enable"这个命令,当前终端里的编译环境,就换成了gcc 10。固然,这个修改只对当前打开的这个终端有效,新打开的终端,仍然是体系默认环境。
如果嫌弃每次打开终端,都要enable一次才气用gcc 10,也可以把"source $HOME/opt/gcc-10/enable"写到~/.bashrc里,启动终端自动实行。
- $ source $HOME/opt/gcc-10/enable #激活GCC 10环境
- $ gcc -v
- 使用内建 specs。
- COLLECT_GCC=gcc
- COLLECT_LTO_WRAPPER=/home/xxxxx/opt/gcc-10/libexec/gcc/x86_64-pc-linux-gnu/10.5.0/lto-wrapper
- 目标:x86_64-pc-linux-gnu
- 配置为:../configure --prefix=/home/xxxxx/opt/gcc-10 --enable-languages=c,c++,fortran,go --disable-multilib
- 线程模型:posix
- Supported LTO compression algorithms: zlib
- gcc 版本 10.5.0 (GCC)
复制代码
5.继续自举
有了GCC 10以后,就可以用GCC 10来编译GCC 13了,步骤方法完全一样,即回到上面的第二步,一步一步来,编译出gcc 13。
- $ source $HOME/opt/gcc-13/enable #激活GCC 13环境
- $ gcc -v
- 使用内建 specs。
- COLLECT_GCC=gcc
- COLLECT_LTO_WRAPPER=/home/xxxxx/opt/gcc-13/libexec/gcc/x86_64-pc-linux-gnu/13.3.0/lto-wrapper
- 目标:x86_64-pc-linux-gnu
- 配置为:../configure --prefix=/home/xxxxx/opt/gcc-13 --enable-languages=c,c++,fortran,go --disable-multilib
- 线程模型:posix
- 支持的 LTO 压缩算法:zlib
- gcc 版本 13.3.0 (GCC)
复制代码
6.编译结果下载
这里我可以把编译出来的编译器成果共享一下,我的体系下都是正常的,但是不保证你的体系能用,大概率没问题。
不过,要留意,解压出文件以后,肯定要按照本身电脑上的路径,修改enable文件里的MAIN_PATH路径。
链接:https://pan.baidu.com/s/1leYlzzpAP68LsMthj4dr3g
提取码:71dj
7.Clang编译器的编译
原本高版本的GCC有了,正常软件都可以编译了,但奈何有些必要用到LLVM,于是不得已,还要编译LLVM,编译Clang出来。我必要的LLVM版本不必要太高,版本10就行,用体系自带的Gcc 7.3就能编译出来。
首先,先下载llvm的源代码:https://github.com/llvm/llvm-project ,但是由于源码量巨大,将近3个G,下载总是失败,我换了清华的镜像下载:
- # 从清华的镜像下载源码,使用10.0.1的版本tag
- git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git --recursive --branch llvmorg-10.0.1
复制代码 由于不替换体系编译器,所以,我们在配置的时间,要把LLVM的安装目录,修改到本身的用户目录$HOME/opt/llvm-10下,之后的LLVM和Clang就放在这里了。
- cd llvm-project
- mkdir build && cd build
- cmake ../llvm -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$HOME/opt/llvm-10"
- make #漫长的编译过程,非常漫长
- make install
复制代码 编译安装完成以后,LLVM存放在$HOME/opt/llvm-10目录下,但是还不能直接使用,必要设置环境。跟GCC一样,在$HOME/opt/llvm-10目录下新建enable文件,并给予可实行权限,写入以下内容:
- #source $HOME/opt/llvm-10/enable
- # 这里是LLVM的存放路径,要根据自己的实际情况修改。
- export LLVM_INSTALL_DIR=$HOME/opt/llvm-10
- # General environment variables
- export PATH=${LLVM_INSTALL_DIR}/bin${PATH:+:${PATH}}
- export MANPATH=${LLVM_INSTALL_DIR}/share/man:${MANPATH}
- export LD_LIBRARY_PATH=${LLVM_INSTALL_DIR}/lib:{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
复制代码 接下来,用法就跟GCC一样了。
- $ source $HOME/opt/llvm-10/enable #激活LLVM环境
- $ clang -v
- clang version 10.0.1
- Target: x86_64-unknown-linux-gnu
- Thread model: posix
- InstalledDir: /home/xxxxx/opt/llvm-10/bin
- Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0
- Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0
- Candidate multilib: .;@m64
- Selected multilib: .;@m64
- $ clang++ -v
- clang version 10.0.1
- Target: x86_64-unknown-linux-gnu
- Thread model: posix
- InstalledDir: /home/xxxxx/opt/llvm-10/bin
- Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0
- Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0
- Candidate multilib: .;@m64
- Selected multilib: .;@m64
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |