背景:
裝置及軟體資訊:
vmware workstation 15 pro
ubuntu 18.04
gcc-7.5.0
目的:編譯安裝 gcc-4.7.4
詳細過程:
gcc-4.7.4.tar.gz mpfr-2.4.2.tar.bz2 gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz
2. 建立需要的目錄
需要建立 ./gcc-4.7.4/ ./gcc_build/
cfns.h.patch:用來修補 ./gcc-4.7.4/gcc/cp/cfns.h
@@ -53,6 +53,9 @@ __inline
static unsigned int hash (const char *, unsigned int);
#ifdef __gnuc__
__inline
+#ifdef __gnuc_stdc_inline__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const char * libc_name_p (const char *, unsigned int);
/* maximum key range = 391, duplicates = 0 */
cfns.gperf.patch:用來修補 ./gcc-4.7.4/gcc/cp/cfns.gperf
@@ -22,6 +22,9 @@ __inline
static unsigned int hash (const char *, unsigned int);
#ifdef __gnuc__
__inline
+#ifdef __gnuc_stdc_inline__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const char * libc_name_p (const char *, unsigned int);
%}
patch-gcc46-texi.diff:用來修補 ./gcc-4.7.4/gcc/doc/gcc.texi
--- ./gcc/doc/gcc.texi.orig 2017-03-01 16:56:48.000000000 -0800
+++ ./gcc/doc/gcc.texi 2017-03-01 17:03:38.000000000 -0800
@@ -86,9 +86,15 @@
@item gnu press
@tab website: www.gnupress.org
@item a division of the
-@tab general: @tex press@@gnu.org @end tex
+@tab general:
+@tex
+press@@gnu.org
+@end tex
@item free software foundation
-@tab orders: @tex sales@@gnu.org @end tex
+@tab orders:
+@tex
+sales@@gnu.org
+@end tex
@item 51 franklin street, fifth floor
@tab tel 617-542-5942
@item boston, ma 02110-1301 usa
@@ -108,6 +114,7 @@
@sp 1
@insertcopying
4. 進行預處理
因為前前後後編譯失敗了很多次,所以每次把所有操作再做一遍很費事,因此在當前目錄下寫了個指令碼 aaa.sh。
下面我會對指令碼進行一定講解,具體安裝時可能每個人都要做一定的調整。
aaa.sh:
sudo rm -rf ./gcc-4.7.4/*
sudo rm -rf ./gcc_build/*
sudo tar zxf gcc-4.7.4.tar.gz
sudo cp mpfr-2.4.2.tar.bz2 ./gcc-4.7.4/
sudo cp gmp-4.3.2.tar.bz2 ./gcc-4.7.4/
sudo cp mpc-0.8.1.tar.gz ./gcc-4.7.4/
sudo patch -p0 ./gcc-4.7.4/gcc/cp/cfns.h cfns.h.patch
sudo patch -p0 ./gcc-4.7.4/gcc/cp/cfns.gperf cfns.gperf.patch
sudo patch -p0 ./gcc-4.7.4/gcc/doc/gcc.texi patch-gcc46-texi.diff
echo
find ./gcc-4.7.4/lib* -type f -name *.h | xargs grep -n " ucontext_ "
find ./gcc-4.7.4/lib* -type f -name *.h | xargs sudo sed -i "s/ ucontext_ / ucontext_t /g"
echo
find ./gcc-4.7.4/lib* -type f -name *.h | xargs grep -n " ucontext_$"
find ./gcc-4.7.4/lib* -type f -name *.h | xargs sudo sed -i "s/ ucontext_$/ ucontext_t/g"
echo
find ./gcc-4.7.4/lib* -type f -name *.h | xargs grep -n "struct ucontext "
find ./gcc-4.7.4/lib* -type f -name *.h | xargs sudo sed -i "s/struct ucontext /ucontext_t /g"
cd gcc-4.7.4
sudo sed -i "/wget/d" ./contrib/download_prerequisites
sudo ./contrib/download_prerequisites
cd ../gcc_build
第1~2行是清理目錄,每次編譯失敗都要清理這兩個目錄。
第7~9行把我剛剛說的3個補丁打上,沒有的話 make 的時候會有 error。當然你也可以注釋掉試試,說不定你的版本就沒這個問題。
echo 換行不解釋。
第11~18行是為了替換 struct ucontext。這個應該是已經不支援了,現在用的是 posix 標準的 ucontext_t。可以參考 use ucontext_t not struct ucontext in linux-unwind.h files 。之所以寫了3組是為了適應不同的情況,這個地方其實也可以打補丁,但是我覺得用命令列替換更好更方便。其中第3組是網上許多補丁完成的功能,但是在我的機子上有些特殊的情況比如 struct uncontext_ 這種,還有一些檔案那些補丁沒有覆蓋到,所以使用了 find 命令進行查詢。
第22行前往編譯目錄。
4. 進行編譯
可以先建立個 log 檔案,一會兒把 make 的螢幕輸出重定向到這。
進入當前目錄,執行 source ./aaa.sh 預處理,執行後自動進入 ./gcc_build,現在就要開始 configure、make、make install 組合拳了。
執行
sudo ../gcc-4.7.4/configure --prefix=/opt/gcc-4.7.4 --disable-multilib --disable-nls --enable-shared --enable-__cxa_atexit --enable-threads=posix --enable-language=c,c++ --enable-checking=release
語言你自己選,路徑就是這個路徑,其他引數反正我這邊使用正常,網上不同人的教程引數基本都不一樣,自己斟酌。
官方對配置引數有詳細的解釋:installing gcc: configuration
注意:我一直說的當前目錄也就是.在我的機器上是/opt,在這條命令裡為了安全我使用的是絕對路徑。
這條命令執行後應該成功建立了 makefile。
執行
su
time make -j4 > /opt/log 2>&1
time 是為了計時,你也可以不要,後面的這個是把螢幕輸出重定向到 /opt/log,也不是必要的。本質上就是 make -j4。
正常情況(一般都不正常)下可以編譯成功,我用了40多分鐘。有問題的話看 /opt/log 進行排查,就看最後10來行,找 error,或者直接執行
grep -n error: /opt/log
進行 debug。排查修改完後重新進行第4步,先預處理,然後……
5. 安裝
執行
sudo make install
即可。 在CentOS 6 4中編譯安裝GCC 4 7 4
wget r 可以開啟 檢視版本 其中kaldi不能使用4.8.1和4.8.2 解壓 tar zxvf gcc 4.7.4.tar.gz 目錄下 contrib download prerequisites 新建乙個存放編譯結果的目錄 mkdir gcc build 然後在此目錄下呼叫 gcc 4....
更改gcc預設版本 gcc版本降級 公升級
更改gcc預設版本 gcc版本降級 公升級 ubuntu系統公升級到16.04以後,gcc的版本變為6.2,編譯比較老的專案編譯不過,需要將gcc版本降級到ubunt14.04時候4.8版本.可以讓系統存在兩個gcc版本,4.8和6.2,但是預設的gcc版本為4.8 編譯老的專案,直接make 而更...
將gcc 4 8降級為gcc 4 6
版本並非越高越好!當初公升級到4.8是為了編譯乙個程式,但是有些程式在以前低版本系統上安裝一點錯誤都沒有,但是在高版本gcc上面卻出現錯誤。還是退回去好了.降級其實和公升級方法基本一樣 先清除原來的版本 sudo update alternatives remove all gcc sudo upd...