###### tags: `組合語言`
# 組合語言共筆 5 : GNU Toolchains
### GCC 指令解釋
```
gcc -fverbose-asm : 會在 <.s> 檔案中加入註解,是檔案更易讀~
gcc -g : 加入除錯(debug)資訊到程式中
gcc -o <file> : 設定輸出檔案前要加
gcc -O、-O1、-O2 : 優化
```
### tool chain
指一系列軟體開發工具
:::success
- Compiler
- linker
- Library : 函式庫、庫 ( 可以被 linking )
- Debugger
:::
### GNU toolchain
:::success
- gcc : GNU(GNU Compiler Collection)編譯器套裝
- g++ : 同 gcc 功能,但只會遵循 c++ 程式碼的編譯方式
- gdb : debugger
- make: 編譯多個文件的工具 (?),會調用 gcc
...
:::
### Cross Compiler Toolchain
:::success
可以編譯出在與本身不同的機器下都可執行的檔案
- 方法 : 會根據設定的機器的處理器,編譯出相應的檔案
```
編譯指令(不再只是 gcc) :
arm-elf-gcc : 專為嵌入式系統開發的 C 函式庫
arm-elf-gcc -mcpu=<輸出機器處理器> : 設定編譯後運行機器的處理器
```
:::
### Native V.S Cross Compiler ToolChain
:::warning
- Native : 編譯過後的程式只能在同種架構的機器上運行
- Cross : 可以在不同架構機器中運行,
:::
---
### Reference
- [gcc 指令](https://hackmd.io/@MVMC-lab/BJnlxNwVr/%2Fp2Pkg8TAQJe-_gN_goxtIA)
- [工具鏈-維基百科](https://zh.wikipedia.org/zh-tw/%E5%B7%A5%E5%85%B7%E9%8F%88)
- [gcc 和 g++ 的聯絡和區別](https://iter01.com/565664.html)
- [深入讲解GCC和Make的区别](https://cloud.tencent.com/developer/article/1343055)
- [Tool Chain](https://hugh712.gitbooks.io/buildroot/content/tool_chain.html)
- [3分鐘看懂gcc、arm-Linux-gcc和arm-elf-gcc的組成及區別](https://www.796t.com/content/1547057528.html)