Linux
如何從原始碼編譯 gcc-5?
看起來 gcc-5 最近已從 Debian 的不穩定儲存庫中刪除。我需要 gcc-5 來編譯較舊的 Linux 核心(3.19),所以我希望從原始碼建構它,這給我帶來了很多麻煩。我一直按照此處的說明進行操作,但我發現自己想知道我需要設置哪些設置等等。到目前為止,我已經完成了以下工作。
- 下載並解壓原始碼。
- 通過執行以下操作配置 gcc-5:
% mkdir objdir % cd objdir % ../gcc-5.4.0/configure (I included neither options nor target flags)
- 嘗試在我的
objdir
目錄中使用以下內容進行建構:% make BOOT_CFLAGS='-O' bootstrap
但是,引導引發的錯誤使我無法進行安裝。執行大約 5 分鐘後,我遇到以下錯誤:
In file included from ../../../../gcc-5.4.0/libgcc/unwind-dw2.c:401:0: ./md-unwind-support.h: In function 'x86_fallback_frame_state': ./md-unwind-support.h:141:18: error: field 'uc' has incomplete type struct ucontext uc; ^ make[5]: *** [../../../../gcc-5.4.0/libgcc/shared-object.mk:14: unwind-dw2.o] Error 1 make[5]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/32/libgcc' make[4]: *** [Makefile:1154: multi-do] Error 1 make[4]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc' make[3]: *** [Makefile:119: multi-do] Error 2 make[3]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc' make[2]: *** [Makefile:16510: all-stage1-target-libgcc] Error 2 make[2]: Leaving directory '/home/me/objdir' make[1]: *** [Makefile:22461: stage1-bubble] Error 2 make[1]: Leaving directory '/home/me/objdir' make: *** [Makefile:22798: bootstrap] Error 2
我正在執行 Debian 10 (Buster) 並安裝了此處列出的必要先決條件。
任何幫助或指導,無論是修復我在引導過程中遇到的錯誤,還是從一般原始碼建構,都將不勝感激!謝謝你。
原因是 glibc 發生了變化,破壞了與舊編譯器的兼容性。這些編譯器有一個更新檔。更新檔替換
struct ucontext
為ucontext_t
inlibgcc/config/<arch>/linux-unwind.h
files,where<arch>
isi386
,aarch64
等alpha
。stackoverflow 上有一個類似的問題。
除了這些修復之外,我還需要從這裡(其中一些就足夠了)和這裡應用對消毒劑程式碼的修復。
之後,GCC 終於建成了。