# 簡介 影片: https://www.youtube.com/watch?v=bN2oJ8hhufM ## 參考 - [Using the GNU Compiler Collection (GCC)](https://gcc.gnu.org/onlinedocs/gcc/index.html) ## 推薦相關教材 1. [「你所不知道的 C 語言」系列講座 - jserv](https://hackmd.io/@sysprog/HJpiYaZfl) 優點:非常扎實 缺點:分量太多、一個三小時的影片需要一個禮拜吸收 2. [底層的 C 語言世界 - ccckmit 陳鍾誠](https://legacy.gitbook.com/book/ccckmit/lowlevelc/details) 配合影片 https://www.youtube.com/watch?v=SXZN8TPJKZ8 這份教材算是很淺顯易懂的教材,缺點是但沒有寫完QQ ## 為何要學會編譯器的基本概念 1. 因為你寫C/C++ 2. 增進程式品質、品味 3. 知道為何出錯 本章節的介紹會以gcc為主,然後使用操作的工具會使用avr-gcc平台的工具為主,因為目前實驗室是以avr-gcc做為開發的主要工具,當然你也可以用單純gcc的編譯器來操作,但會有些許地方不同。 如果想安裝windows平台的gcc可以到 [mingw-w64](https://sourceforge.net/projects/mingw-w64/) 下載。 如果想安裝windows平台的avr-gcc可以到 [AVR-GCC for Windows 32 and 64 bit](http://blog.zakkemble.net/avr-gcc-builds/) 下載。 ## 什麼是 GCC GCC 是由GNU發展的編譯器套裝軟體(英語:GNU Compiler Collection,縮寫為GCC),指一套程式語言編譯器,以GPL及LGPL授權條款所發行的自由軟體,也是GNU計劃的關鍵部分,也是GNU工具鏈的主要組成部份之一。 在GCC中我們常用的工具有以下,這邊只列出少許工具。 | 名稱 | 簡介 | | | ---- | ------------------- | -------- | | gcc | C編譯器 | https://linux.die.net/man/1/gcc | | g++ | C++編譯器 | https://linux.die.net/man/1/g++ | | ar | archive 檔案操作工具 | https://linux.die.net/man/1/ar | | as | 組譯器 | https://linux.die.net/man/1/as | | size | 大小查看 | https://linux.die.net/man/1/size | | obj-dump | obj 檔案查看 | https://linux.die.net/man/1/obj-dump | | nm | symbol 查看 | https://linux.die.net/man/1/nm | | 等... | | | 參考: - [wiki GCC](https://zh.wikipedia.org/wiki/GCC) - [wiki GNU計劃](https://zh.wikipedia.org/wiki/GNU計劃) ## avr-gcc 與 gcc 差在哪 avr-gcc是指GCC工具移植到AVR平台上的版本。 GCC這些工具會依造不同平台去做移植,移植完後通常會在最前方加上平台名稱,標示這套工具是給哪個平台使用的,像在avr平台的工具名稱會在最前面加上`avr-`,如下表 | avr平台 | 原本 | | ------------ | -------- | | avr-gcc | gcc | | avr-g++ | g++ | | avr-ar | ar | | avr-as | as | | avr-size | size | | avr-objdump | objdump | 如果有興趣是怎麼從一般gcc產生avr-gcc,可以參考下方網址: [AVR-GCC for Windows 32 and 64 bit](http://blog.zakkemble.net/avr-gcc-builds/)