## 紀錄如何在Ubuntu 22.04上面安裝gcc 4.6.4版本(不確定這樣對不對) #### 要先確定Ubuntu的版本架構 ```shell > lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy > arch x86_64 #會對應到amd64 i386 #i386 i686 #i386 > uname -a Linux LAPTOP-DMB8DQN5 4.4.0-19041-Microsoft #2311-Microsoft Tue Nov 08 17:09:00 PST 2022 x86_64 x86_64 x86_64 GNU/Linux ``` #### 然後安裝套件 要安裝gcc 4.6.4以前,要先安裝依賴 先確認libc6 libc6-dev有無安裝(要高於某個版本,但Ubuntu 22.04有高於需要版本) ``` # 這兩行可以查看目前套件的版本,grep後面可以改套件名稱 dpkg -l | grep libc6 dpkg -l | grep libc6-dev ``` #### 安裝gcc-base之後安裝gcc(這個才是執行檔) > 如果安裝gcc-base就直接`gcc --version`是沒有辦法的 > 但在安裝gcc以前,要先安裝cpp 4.6 > 但在安裝cpp 4.6以前,要先安裝libmpfr4>=3.1.2 > 但在安裝libmpfr4>=3.1.2以前,要先安裝multiarch-support > 但在安裝multiarch-support,要先確認libc6>= 2.13-5 #### 所以整個流程會是: 1. 安裝gcc-base 2. 確認libc6 >= 2.13-5 3. 安裝multiarch-support 4. 安裝libmpfr4>=3.1.2 5. 安裝cpp 4.6 6. 安裝gcc 4.6.4 --- ## 1.下載gcc-base並安裝 http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/ #### 這裡會有很多.deb檔案,我第一次看也是眼花撩亂  #### 先找到有gcc base關鍵字的檔案  #### 然後就下載deb,根據剛剛arch來下載(amd64),先左鍵複製連結網址 ```shell # 下載套件 wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/gcc-4.6-base_4.6.4-6ubuntu2_amd64.deb # 安裝套件 dpkg -i gcc-4.6-base_4.6.4-6ubuntu2_amd64.deb ``` --- ### 2.檢查libc6版本(>= 2.13-5) ```shell > dpkg -l | grep libc6 ii libc6:amd64 2.35-0ubuntu3.1 amd64 GNU C Library: Shared libraries ii libc6-dev:amd64 2.35-0ubuntu3.1 amd64 GNU C Library: Development Libraries and Header Files ``` --- ### 3.安裝multiarch-support https://packages.debian.org/buster/multiarch-support > 這邊會標示依賴,[armhf, i386] 的系統就應該要遵循該依賴 > [除 armhf, i386](也就是amd64),則libc6 >= 2.3.6-2 > 不確定可以問chatGPT  #### 點自己的硬體架構  #### 這邊會告訴你有兩種安裝方式,可以直接更改/etc/apt/sources.list,然後用apt安裝,但我是用deb的方式安裝  #### 這個連結點下去沒有反應的話,也是複製連結+wget下載,然後安裝deb檔  --- ### 4.安裝libmpfr4>=3.1.2 https://mirrors.wikimedia.org/ubuntu/pool/main/m/mpfr4/ #### 找了很久才找到這個網站,下意識會覺得應該是在下面這個網站的 l/ 分類,但其實是 m/ 分類底下 https://mirrors.wikimedia.org/ubuntu/pool/main #### 看到一大堆檔案又不知道要下載哪一個了,首先先區分: > _doc的是文檔的概念,我們可以先撇除 > _dbg是含有debug的調適,也可以先忽略 > 再來就剩-dev跟什麼都沒有的純粹的libmpfr4 > 那我們要下載的是libmpfr4,所以-dev也不理他  #### 經過amd64篩選,剩這些(libmpfr4>=3.1.2) > 只要裝3.1.2以上的版本就行,所以依照自己喜好 > 我裝3.1.2的  --- ### 5.安裝cpp 4.6 http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/ #### 回到原本的網站,他有cpp的連結,根據剛剛的做法,過濾doc以後,挑選arch標示的版本安裝  --- ### 6. 安裝gcc 4.6.4 http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/ #### 同樣是剛剛的網站,有好多gcc,我們可以先排除base了 > doc排除後,有沒看過的 > > locales代表本地化支持: > 可能包含了本地化數據和設置,以確保在特定的語言環境下使用 GCC 編譯器時,文本、時間、數字格式等能夠正確地顯示和處理 > multilib:可以處理多種架構,允許開發人員在單個系統上編譯適用於多種不同架構的程序 > plugin:編寫gcc插件開發 > source:原始碼檔案  #### 這些都排除以後,就只剩下這些,但我們要下載deb檔案,所以也是根據arch來下載  --- ### 安裝好了以後,可以檢查有沒有真的安裝好 ```shell # 會列出含有gcc的執行檔,*代表模糊匹配任何字元 > ls /usr/bin/gcc* /usr/bin/gcc /usr/bin/gcc-9 /usr/bin/gcc-ar-9 /usr/bin/gcc-nm-9 /usr/bin/gcc-ranlib-9 /usr/bin/gcc-10 /usr/bin/gcc-ar /usr/bin/gcc-nm /usr/bin/gcc-ranlib /usr/bin/gccgo /usr/bin/gcc-11 /usr/bin/gcc-ar-10 /usr/bin/gcc-nm-10 /usr/bin/gcc-ranlib-10 /usr/bin/gccgo-11 /usr/bin/gcc-4.6 /usr/bin/gcc-ar-11 /usr/bin/gcc-nm-11 /usr/bin/gcc-ranlib-11 > gcc-4.6 --version gcc-4.6 (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` ### 設定預設編譯 #### 當我想要`gcc --version`,就直接顯示gcc 4.6.4,但是預設的gcc室內建的,所以可以用下面這個修改 ```shell # 查看當前可以替換的gcc選項 > update-alternatives --list gcc /usr/bin/gcc-10 /usr/bin/gcc-4.6 /usr/bin/gcc-9 # 如果gcc-4.6沒有出現,可以把它加進來(10代表priority) # /usr/bin/gcc-4.6 替換成你的gcc-4.6路徑 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 10 # 設定預設gcc sudo update-alternatives --set gcc /usr/bin/gcc-4.6 # 或者用圖形化界面也可以 update-alternatives --config gcc # 查看gcc版本 gcc --verison gcc (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` --- ### 安裝g++ 4.6.4 http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/ #### 下載跟剛剛一樣的,只是gcc變成g++  #### 安裝好後,也是可以檢查g++ > 安裝的時候,我這裡有跳出libstdc++6-4.6-dev依賴的提示 ```shell > ls /usr/bin/g++* /usr/bin/g++ /usr/bin/g++-10 /usr/bin/g++-11 /usr/bin/g++-4.6 /usr/bin/g++-9 # 看版本 > g++-4.6 --version g++-4.6 (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` #### 把g++改為預設 ```shell # 查看當前可以替換的gcc選項 > update-alternatives --list g++ /usr/bin/g++-10 /usr/bin/g++-4.6 /usr/bin/g++-9 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 10 # 設定預設gcc sudo update-alternatives --set g++ /usr/bin/g++-4.6 # 或者用圖形化界面也可以 update-alternatives --config g++ # 查看gcc版本 g++ --verison ``` #### 然後還要安裝一個套件libstdc++6-4.6-dev http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/ #### 原本的網頁就有了,安裝有-dev的 > 安裝的時候,我有跳出g++-4.6依賴的提示 > 不確定是不是因為我還沒有把g++ -4.6改成預設?  --- ### 安裝好後,可以試寫hello.cpp測試 ```cpp #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } ``` ```shell > g++ -o hello hello.cpp > ./hello Hello, World! ``` --- ### 這樣應該就完成了(?) > 第一次這樣裝,如果有錯的話可以跟我說QQ
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up