gcc 6.2.0/6.3.0/8.2.0 編譯安裝


參考:http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html 

下載地址在這里:https://ftp.gnu.org/gnu/gcc

編譯之前需要做准備工作。

yum -y groupinstall "Development Tools"
yum -y install zlib-devel

我用的是這個

../configure \
--prefix=/usr/local/gcc-6.2.0                                    \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++,go &&
make -j4
注:實際發現對gcc-6.2.0不能用make -j40,對gcc-6.3.0用make -j20是可以的。

編譯gcc-6.4.0時,似乎用 -j12是可以編譯的。

網頁上的命令是:

../configure                                         \
    --prefix=/usr                                    \
    --disable-multilib                               \
    --with-system-zlib                               \
    --enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make

有的語言不需要,我就刪掉了。保留go,是為了將來和erlang做比較。

結果編譯出現問題,但以前有一次,沒有用make -j4,用make編譯

是成功的。

按照錯誤提示,刪除一些東西,反復嘗試幾次,經過對個別目錄make,最后解決問題。

編譯提示需要 gmp,mpfr和mpc,通過yum方式安裝:

yum -y install gmp-devel
yum -y install mpfr-devel
yum -y install libmpc-devel

似乎libmpc-devel依賴前兩個,安裝這個的時候,前兩個也被安裝了。

不采用這種方式安裝gmp, mpfr和mpc,可以通過https://www.mawenbao.com/note/install-gcc-5.2.0-from-source.html 提示的來編譯安裝。

就是: make -j4時出現了問題,然后需要解決個別問題,用make來解決。以后再次編譯的時候,
1. 需要先make distclean, and/or rm ./config.cache
2. 編譯時,如果可以利用晚上時間編譯,就make, 不加 "-j4"。

 如果提示類似於“../../mpfr/mpfr.h:334:55: error: expected ‘)’ before ‘mpfr_rnd_t’”一類的錯誤,那么可能是yum安裝的gmp,mpfr或者

libmpc版本不適合本次編譯,可以執行:

sh contrib/download_prerequisites 來把依賴項准備好。編譯的時候,會編譯這些依賴項的。

 

要容許多個gcc版本存在,可以把原來的/usr/bin/gcc改為/usr/bin/gcc4.4.7(我的版本是這個),然后在/usr/local/bin寫gcc6.2.sh和gcc4.7.sh,內容分別是

ln -sf /usr/local/gcc-6.2.0/bin/gcc /usr/bin/gcc
....

這樣的內容。

gcc6.4.0是6系列里版本最高的, https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.gz。

編譯完gcc-6.3.0,測試發現,說是運行時,version `GLIBCXX_3.4.22' not found。 因為make install時,沒有把libstdc++.so.6.0.22拷貝到/usr/lib64下。

應該拷貝過去,另外把libstdc++.so.6重新鏈接下。另一個方法是把安裝的目錄:/usr/local/gcc-6.3.0/lib64 給放到 /etc/ld.so.conf下或者/etc/ld.so.conf/xxxx中。

可以用"strings /usr/lib64/libstdc++.so.6 | grep GLIBC" 來查看。

gcc 8.2.0的編譯如下:

Installing latest major version of gcc: gcc 8 (GCC 8.2.0) - released 07/26/2018:

GCC 8.2 is a bug-fix release for gcc 8.1.0, containing substantial new functionality not available in GCC 7.x or previous GCC releases.

Download file: https://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gz

Compile and install:

//required libraries:
yum install libmpc-devel mpfr-devel gmp-devel -y

yum install zlib-devel*

./configure --prefix=/usr/local/share/gcc-8.2.0 --with-system-zlib --disable-multilib --enable-languages=c,c++

make -j 8 <== this may take around 75 minutes or less to finish with 8 threads
(depending on your cpu speed)

make install

提醒一下,這個有人 make -j 8 在8核機器上要花75分鍾,我請系統管理員在虛擬機上調成了30個核,這下編譯就非常快了。但這樣編譯,出現過3次錯誤。最后改為:-j 10就編譯成功了。

用這個gcc編譯時,發現gcc 8或gcc 7的版本對於下面的錯誤沒法解決,遍尋google也沒有好辦法。

error: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 84 [-Werror=format-truncation=]

以后發現能解決了,Makefile中增加:

ifeq ($(shell test $(GCC_VERSION) -ge 70 && echo 1), 1)
CFLAGS +=-Wno-format-truncation
endif

 

最后說一下make -j 的事情。編譯gcc-6.4.0時,make -j30出錯,改為make -j10, make -j4,還是有錯誤;出現錯誤后,make 也不行。趁着晚上,make clean && make,第二天過來看,編譯成功了。18點開始編譯,22點編譯結束,機子是一個cpu的虛擬機。實際操作的時候怎么辦呢,就是准備兩個同樣的目錄,一個就make,另一個make -jxx。

說說不通過編譯用yum的方式

The best approach to use yum and update your devtoolset is to utilize the CentOS SCLo RH Testing repository.

yum install centos-release-scl-rh
yum --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc devtoolset-7-gcc-c++
Many additional packages are also available, to see them all

yum --enablerepo=centos-sclo-rh-testing list devtoolset-7*

該方法之在centos6上成上能成功,在centos7上,有的能成功,最近是沒有成功。

 

 
         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM