---
# System prepended metadata

title: 紀錄如何在Ubuntu 22.04上面安裝gcc 4.6.4
tags: [個人學習筆記]

---

## 紀錄如何在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檔案，我第一次看也是眼花撩亂
![](https://hackmd.io/_uploads/H1789rnnn.png =500x)

#### 先找到有gcc base關鍵字的檔案
![](https://hackmd.io/_uploads/r103cB2h2.png)

#### 然後就下載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

![](https://hackmd.io/_uploads/Sy6ohBnhn.png =400x)

#### 點自己的硬體架構

![](https://hackmd.io/_uploads/r12x0S2nn.png )

#### 這邊會告訴你有兩種安裝方式，可以直接更改/etc/apt/sources.list，然後用apt安裝，但我是用deb的方式安裝

![](https://hackmd.io/_uploads/SJFNCBn3h.png)

#### 這個連結點下去沒有反應的話，也是複製連結+wget下載，然後安裝deb檔

![](https://hackmd.io/_uploads/HJyj0Bn2n.png)



---

### 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也不理他


![](https://hackmd.io/_uploads/rkHKyIhnh.png)

#### 經過amd64篩選，剩這些(libmpfr4>=3.1.2)
> 只要裝3.1.2以上的版本就行，所以依照自己喜好
> 我裝3.1.2的

![](https://hackmd.io/_uploads/BJzclIhnh.png)


---

### 5.安裝cpp 4.6

http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-4.6/

#### 回到原本的網站，他有cpp的連結，根據剛剛的做法，過濾doc以後，挑選arch標示的版本安裝

![](https://hackmd.io/_uploads/S1xN-Lhn3.png)

---


### 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：原始碼檔案

![](https://hackmd.io/_uploads/Sk0v-8hn3.png)

#### 這些都排除以後，就只剩下這些，但我們要下載deb檔案，所以也是根據arch來下載

![](https://hackmd.io/_uploads/BysH7Uhh2.png)



---

### 安裝好了以後，可以檢查有沒有真的安裝好

```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++

![](https://hackmd.io/_uploads/HJcIHL2hh.png)

#### 安裝好後，也是可以檢查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改成預設?

![](https://hackmd.io/_uploads/SyesIL2h2.png)



---

### 安裝好後，可以試寫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





















