gcc4 7 4降級編譯

2021-10-02 20:39:42 字數 4640 閱讀 6915

背景:

裝置及軟體資訊:

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...