長治網(wǎng)站建設(shè)招聘聚合搜索引擎
目錄
1、安裝gcc
1.1、查看是否含有g(shù)cc及gcc版本
1.2、快速安裝gcc
2、升級gcc
2.1、下載gcc源碼包并解壓縮
2.2、下載編譯依賴項
2.3、新建gcc-bulid目錄(與gcc-10.5.0同級)并進(jìn)入該目錄中
2.4、生成Makefile文件
2.5、開始編譯
2.6、安裝
2.7、重啟
2.8、驗證
3、依賴新的版本
3.1 、進(jìn)入/usr/lib64目錄
3.2、拷貝libstdc++.so.6.0.28到系統(tǒng)/usr/lib64目錄下
3.3、修改文件權(quán)限
3.4、備份原libstdc++.so.6軟連接
3.5、創(chuàng)建新的軟連接,連接到新的庫
3.6、驗證依賴是否更新
3.7、驗證新的庫是否生效
?可能遇到的問題:
1、/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found問題2、編譯報錯:error: 'const char* libc_name_p
[INFO ] ================================================================= [INFO ] Installing final gcc compiler [EXTRA] Configuring final gcc compiler [EXTRA] Building final gcc compiler [ERROR] cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline with 'gnu_inline' attribute [ERROR] make[3]: *** [cp/except.o] Error 1 [ERROR] make[2]: *** [all-gcc] Error 2 [ERROR] make[1]: *** [all] Error 2 [ERROR]
1、安裝gcc
由于 Linux 操作系統(tǒng)的自由、開源,在其基礎(chǔ)上衍生出了很多不同的 Linux 操作系統(tǒng),如 CentOS、Ubuntu、Debian 等。這些 Linux 發(fā)行版中,大多數(shù)都默認(rèn)裝有 GCC 編譯器(版本通常都較低)。
1.1、查看是否含有g(shù)cc及gcc版本
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/6.5.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../../gcc-6.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 6.5.0 (GCC)
[root@localhost ~]#
可以看到,系統(tǒng)中包含了gcc且版本為6.5.0,如果沒有g(shù)cc,可以通過下面命令來進(jìn)行安裝
1.2、快速安裝gcc
yum -y install gcc
yum -y install gcc-c++
通過如上命令得到的gcc通常版本較低。
2、升級gcc
升級gcc需要在系統(tǒng)中包含一個低版本的gcc
2.1、下載gcc源碼包并解壓縮
下載地址:gnu-gcc安裝包下載_開源鏡像站-阿里云,可以手動下載,也可以通過wget直接下載到服務(wù)器上
# 進(jìn)入目錄
cd /usr/local
# 下載源碼
wget https://mirrors.aliyun.com/gnu/gcc/gcc-10.5.0/gcc-10.5.0.tar.gz
# 解壓縮
tar -zxvf gcc-10.2.0.tar.gz
# 進(jìn)入gcc源碼目錄
cd gcc-10.5.0/
2.2、下載編譯依賴項
./contrib/download_prerequisites
執(zhí)行完畢后,可以發(fā)現(xiàn)gcc-10.5.0的目錄中多了gmp、isl、mpc、mpfr,如果沒有這些依賴包,則不能進(jìn)行下面的操作。
2.3、新建gcc-bulid目錄(與gcc-10.5.0同級)并進(jìn)入該目錄中
mkdir gcc-build
cd gcc-build/
2.4、生成Makefile文件
../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
這時候如果出現(xiàn)報錯:
checking for the correct version of gmp.h... no configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
解決辦法:執(zhí)行以下命令
yum -y install gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel
再次運行命令就成功了
../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
2.5、開始編譯
make
注意:編譯時間較長,請選擇適當(dāng)?shù)臅r間進(jìn)行此操作。
GCC高版本編譯低版本GCC報錯:
[INFO ] =================================================================
[INFO ] Installing final gcc compiler
[EXTRA] Configuring final gcc compiler
[EXTRA] Building final gcc compiler
[ERROR] cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline with 'gnu_inline' attribute
[ERROR] make[3]: *** [cp/except.o] Error 1
[ERROR] make[2]: *** [all-gcc] Error 2
[ERROR] make[1]: *** [all] Error 2
[ERROR]
解決辦法,修改要編譯的GCC代碼,參考鏈接如下?
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=ec1cc0263f156f70693a62cf17b254a0029f4852
2.6、安裝
make install
2.7、重啟
2.8、驗證
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/10.5.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 10.5.0 (GCC)
[root@localhost ~]#
3、依賴新的版本
3.1 、進(jìn)入/usr/lib64目錄
cd /usr/lib64
3.2、拷貝libstdc++.so.6.0.28到系統(tǒng)/usr/lib64目錄下
cp /usr/local/lib64/libstdc++.so.6.0.28 .
3.3、修改文件權(quán)限
chmod 755 libstdc++.so.6.0.28
3.4、備份原libstdc++.so.6軟連接
mv libstdc++.so.6 libstdc++.so.6-bak
3.5、創(chuàng)建新的軟連接,連接到新的庫
ln -s libstdc++.so.6.0.28 libstdc++.so.6
3.6、驗證依賴是否更新
ll libstd*
[root@localhost lib64]# ll libstd*
lrwxrwxrwx. 1 root root ? ? ? 19 Jul 14 20:05 libstdc++.so.6 -> libstdc++.so.6.0.22
-rwxr-xr-x. 1 root root ? 995840 Sep 29 ?2020 libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11541760 Jul 14 20:04 libstdc++.so.6.0.22
-rwxr-xr-x. 1 root root 16833120 Jul 14 04:46 libstdc++.so.6.0.28
lrwxrwxrwx. 1 root root ? ? ? 19 Feb ?9 ?2022 libstdc++.so.6-bak -> libstdc++.so.6.0.19
lrwxrwxrwx. 1 root root ? ? ? 19 Jul 14 04:48 libstdc++.so.6-bak.bak -> libstdc++.so.6.0.28
[root@localhost lib64]#
3.7、驗證新的庫是否生效
strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
[root@localhost lib64]# strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
jdk下載:Index of java-local/jdk