GNU 程式設計GNU 程式簡介GNU 與 C 語言gcc 編譯器glibc 函式庫make 建置ld 連結器as 組譯器ar 函式庫objdumpobjcopy訊息相關網站參考文獻最新修改簡體版English |
GNU 系統開發工具GNU 開發工具是由 GNU 組織所設計的,包含 gcc 編譯器、as 組譯器、ld 連結器,make 專案建置工具等。這些工具已廣泛被使用於系統程式的開發上,甚至,著名的 Linux 作業系統也是用 GNU 工具所開發完成的。 GNU 工具支援許多種類的 CPU,包含 Intel 的80x86、Motorola 的 68000,ARM、MIPS等數十種處理器,因此也廣泛被使用於嵌入式系統的開發上,在嵌入式系統的市場有極高的佔有率。 GNU工具的原始程式碼,幾乎都是使用 C 語言所撰寫,因此,熟悉 C 語言的人可以很容易的取得程式碼並閱讀之,這也與本書使用 C 語言作為範例的立場一致,也是我們採用 GNU 工具的原因之一。 GNU 開發工具採用開放原始碼的 GPL授權,原始程式碼完全開放,因此,若想進一步理解其運作原理,或者修改後重新編譯使用,只要按照 GPL授權釋出原始程式碼即可,這提供了學習者一個很好的學習管道,能更進一步學習這些工具背後的原理。 更棒的是,由於GNU 工具乃是 Linux 作業系統的主要開發工具,Linux 的整個系統都建構在 GNU 開發工具上。因此,透過 GNU 工具,我們得以深入實務領域,並且銜接上『嵌入式系統』與『作業系統』等課程。另外,透過 GNU 的開放原始碼,讓讀者於有疑問或想進一步研究時可以取得原始碼直接閱讀,這是其他商業性開發工具所難以提供的。 GNU開發環境的安裝在 Linux 當中,預設就包含了GNU 工具,因此,若您所使用的作業系統是 Linux,那不需要特別的安裝,預設就會包含 gcc, as, ld, make 等開發工具,使用相當簡便。 在 Microsoft Windows 作業系統當中,要使用 GNU 開發工具也很容易,Cygwin 與 Mingw 是兩種常見的 gcc 環境,您可以安裝其中一種,就能輕易的編譯C語言及組合語言。 Mingw 與 Cygwin 兩種環境具有相反的設計哲學,Mingw 是Minimalist GNU for Windows 的縮寫,該軟體主要是將 GNU 工具移植到 MS. Windows 平台,直接連接上 MS. Windows 的底層函式庫。此種作法的執行速度較快,但是與Linux 的互通性則較差。 Cygwin 則是 Cygnus 公司所建立的,Cygwin的名稱來來自於 GNU + Cygnus + Windows 的縮寫。Cygwin環境的目標則是在 MS. Windows 底下建立起一個模仿 Linux 的環境,然後才將 Linux 環境中的程式整個移植到 MS. Windows 當中。此種作法的執行速度較慢,但是與 Linux 的互通性會較好。 要安裝 Mingw 環境,最簡單的方法是安裝 Dev C++,對於學過C語言的學生而言,Dev C++是經常被使用到的開發工具,該軟體其實是搭配Mingw環境所建構而成的,當您安裝了Dev C++ 之後,可以在其安裝錄徑下找到 Mingw 版本的 gcc與 ld 等 GNU 工具。舉例而言,筆者的這些工具位於C:\Dev-Cpp\bin 這個資料夾底下。您可以於 Windows 系統環境中的 PATH 變數加入該路徑,就能在命令列中執行 gcc 等指令。 Cygwin開發環境的安裝安裝 Cygwin 開發環境相當簡單,您可以從 http://www.cygwin.com/ 網站上按下Install Cygwin now 的連結,即可安裝此一開發環境, 安裝 Cygwin 這套軟體時,請確認是否勾選了All/Devel/{gcc、binutils、make} 等選項,如圖 1 所示。如此,即可在 Window 當中以 GNU工具開發 C 語言與組合語言程式,其用法與 Linux 當中幾乎大部分都相同,本書中的範例也都可以在 Cygwin 上執行。 ![]() 圖 1 開發環境 Cygwin 安裝時,請確認勾選了 gcc, make, binutils 等三個選項 對於 Linux 的使用者而言,通常都很熟悉其命令列 (Shell) 的操作,因此,我們將不多作解說,然而,對於原本熟悉 Microsoft Windows 的讀者,我們將透過本節的介紹,導引讀者進入 Cygwin 的命令列操作環境,使讀者能在後續的章節中,使用 GNU 工具時能更快速的理解,而不需花費太多時間熟悉使用環境。 若您使用的是 Microsoft Windows 作業系統,則請先安裝 Cygwin 軟體環境後,選取『開始/所有程式/Cygwin/Cygwin Bash Shell』項目,以啟動 Cygwin 的命令列環境,接著,會顯示出如圖 2 的命令列視窗。 ![]() 圖 2 Cygwin 開發環境的初始進入畫面 在安裝完 Cygwin 環境之後,您就可以開始使用 GNU 工具了,在本節中,我們將先介紹 gcc 編譯器的基本用法,然後在第8章的編譯器中會介紹其深入的用法。GNU工具中除了 gcc 編譯器之外,還有許多其他的工具,像是連結、目的檔工具等,這些工具的用法請參考附錄C。建議讀者先閱讀完附錄C之後,再回到此處繼續閱讀。 以下我們將使用 Cygwin 開發環境作為範例,介紹 GNU 工具的使用方法,利用範例導向的方式,導引讀者熟悉GNU 工具的操作。圖 3,顯示了GNU工具使用的基本流程。 ![]() 圖 3 GNU工具使用的基本流程 首先,請讀者撰寫如範例 1 兩個C語言程式 main.c 與 sum.c。 範例 1. C 語言程式 - main.c 與 sum.c // C 語言主程式 (main.c) // C 語言函數 (sum.c) 接著,您可以使用 GNU 的 gcc 工具對這些檔案進行編譯連結,直接產生執行檔。 範例 2. 利用 gcc同時編譯 main.c 與 sum.c 並輸出執行檔
在範例 2 中,所產生的執行檔名稱為 sum,在 Gygwin 的環境中,其輸出檔案名稱為 sum.exe,而在 Linux 中,其輸出檔案名稱為 sum.o。 請注意,在 Linux 與 Cygwin 的環境下,要執行一個執行檔,例如像 Linux 下的 sum.o 或 Cygwin 下的 sum.exe,您必須於檔名前面加上 『./』 符號,這是沿襲 Linux 中的慣例。因此,在上述範例的第二行指令中,我們使用 ./sum 語法以執行輸出檔,而非像在 DOS 中,直接輸入 sum 命令,這是 Cygwin 的初學者常會碰到的一個問題。 接著,我們將示範如何用 gcc 將 C 語言編譯後轉換為組合語言。這可利用 gcc 中的 –S 參數完成,參數 –S 用來告訴 gcc 產生組合語言而非執行檔。如此,有利於我們觀察 C 語言與組合語言之間的對照關係。例如,以下兩個指令可以分別 sum.c 與 main.c 程式轉換為組合語言。
gcc 雖然是個編譯器,但是也可以被用來當成組譯器使用,因此,我們可以利用gcc 編譯器來『組譯』組合語言程式,在圖 1.6中,我們示範了如何利用 gcc 當作組譯器,將 sum.s 與main.s兩個組合語言程式,直接組譯後連結成執行檔 sum2 。 將 gcc 當成組譯器使用
除了當組譯器使用之外,gcc 更能將 C 語言與組合語言檔混合輸入,然後,編譯、組譯、連結一次完成,在圖 1.7中,我們將示範如何利用 gcc 同時編譯 C 語言檔 main.c 與組合語言檔 sum.s,然後產生執行檔 sum3 。 圖 1.7 利用 gcc 編譯 C 語言 main.c 同時組譯組合語言 sum.s
在本節中,我們介紹了 gcc 的一些基礎用法,然而,gcc 是一套強大而複雜的編譯器,其詳細用法無法在此盡列,有興趣的讀者可參考本書附錄中的 gcc 用法一節,有較詳細的參數與用法描述,對於須更詳細的瞭解 gcc 的讀者而言,可參考網路上的 gcc 資源 與 gcc 的官方指南 。 |
GNU 工具與 Cygwin 開發環境
page revision: 5, last edited: 11 Oct 2010 05:36
Post preview:
Close preview