背景
前幾天準備寫OS時一直提示我沒有i686-elf-gcc,使用Ubuntu自帶的apt工具下載卻無法定位該包。
而寫OS這種跟底層有關的裸機編程不可以使用原生gcc,于是我便在Ubuntu的倉庫裡面亂翻,試圖翻出些有用的替代品,結果裡面一個和i686-elf-gcc有關係的都沒有。
于是我只好Google了,並且通過一頓查找,搜尋到了在騰訊雲開發者社區的一篇文章:Ubuntu 18.04安装i686-elf交叉编译工具链的方法[通俗易懂]。
這個文章雖然講的是在2018年4月發佈的Ubuntu 18.04的方法,但是經過我的實踐,發現這則方法在Ubuntu 24.04也是有用的。
下面則是這則方法的步驟,希望對你們有用也是防止我以後忘了。
方法
其實就是手動編譯滿浪費時間的,這是最經典也是最靈活的方法,可以完全控制編譯器的版本和配置。
安裝必要的依賴
先打開Terminal,更新一下包列表幾乎所有教程必備的第一步並安裝編譯工具和依賴庫。執行以下命令:
sudo apt updatesudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo wget這些都是編譯binutils和gcc所必備的工具和庫。
下載原始碼
創建一個工作目錄(這裡我選的是~/src)並下載binutils和gcc的原始碼。版本號根據需要選擇,此處以較新的穩定版為example:
cd ~/srcwget https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xzwget https://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.xztar -xf binutils-2.42.tar.xztar -xf gcc-14.2.0.tar.xz設定環境變數
定義目標平臺和安裝前綴,方便後繼操作:
export PREFIX="$HOME/opt/cross"export TARGET=i686-elfexport PATH="$PREFIX/bin:$PATH"將$HOME/opt/cross設定為安裝路徑,可以保持系統整潔,也便於日後刪除或管理。
編譯安裝Binutils與GCC
cd ~/srcmkdir build-binutilscd build-binutils../binutils-2.42/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werrormakemake install
cd ~/src# GCC 的依赖脚本会自动下载 GMP、MPFR、MPC 等cd gcc-14.2.0./contrib/download_prerequisitescd ..mkdir build-gcccd build-gcc../gcc-14.2.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headersmake all-gccmake all-target-libgccmake install-strip-gccmake install-strip-target-libgcc編譯安裝過程會花費一點很多時間,請耐心等待中間可以打會兒galgame什麼的。
配置環境變數(永久生效)
為了讓編譯器在任何新Terminal都可以使用,可以講下行加入到你的~/.bashrc(zsh則是/.zshrc)中:
export PATH="$HOME/opt/cross/bin:$PATH"之後執行source ~/.bashrc(zsh則是source /.zshrc)或者重啟Terminal。
搞定。
結尾
其實Archlinux系的AUR倉庫是有i686-elf-gcc包的,如果實在不行也可以轉去Arch~~(Canonical震怒)~~。
希望能幫到你們,這是我第一次寫技術性部落格。
分享文章
生成精美分享圖或複製連結,與更多人分享本文。
繼續閱讀
換條路線
從其他文章中穩定抽取
最後更新於 ,距今已過 216 天
部分內容可能已過時