實驗報告三-GCC編譯程序_第1頁
實驗報告三-GCC編譯程序_第2頁
實驗報告三-GCC編譯程序_第3頁
實驗報告三-GCC編譯程序_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)計學(xué)院嵌入式操作系統(tǒng)實驗報告實驗三 GCC編譯程序班級 嵌入班 姓名 122208204120羅航 l 實驗?zāi)康模壕帉懸粋€應(yīng)用程序,使用gcc進(jìn)行編譯,并分別使用-o,-g,-static,-O2等選項,了解這些選項的作用。l 實驗設(shè)備:軟件:安裝了Fedora 11的vmware虛擬機(jī)。 硬件:PC機(jī)一臺。l 背景知識:1. gcc的概念: GCC(GNU Compiler Collection,GNU 編譯器套裝),是一套由 GNU 開發(fā)的編程語言編譯器。GCC 原名為 GNU C 語言編譯器,因為它原本只能處理 C 語言。GCC 很快地擴(kuò)展,變得可處理 C+。之后也變得可處理 Fort

2、ran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。我們使用的 gcc 命令主要是用于處理 c 語言程序。 2. gcc的執(zhí)行過程: 雖然我們稱 Gcc 是 C 語言的編譯器,但使用 gcc 由 C 語言源代碼文件生成可執(zhí)行文件的過程不僅僅是編譯的過程,而是要經(jīng)歷四個相互關(guān)聯(lián)的步驟預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編(Assembly)和鏈接(Linking)。 命令 gcc 首先調(diào)用 cpp 進(jìn)行預(yù)處理,在預(yù)處理過程中,對源代碼文件中的文件包含(include)、預(yù)編譯語句(如宏定義 define 等)進(jìn)行分析

3、。接著調(diào)用 cc1 進(jìn)行編譯,這個階段根據(jù)輸入文件生成以.o 為后綴的目標(biāo)文件。匯編過程是針對匯編語言的步驟,調(diào)用 as 進(jìn)行工作,一般來講,.S 為后綴的匯編語言源代碼文件和匯編、.s 為后綴的匯編語言文件經(jīng)過預(yù)編譯和匯編之后都生成以.o 為后綴的目標(biāo)文件。當(dāng)所有的目標(biāo)文件都生成之后,gcc 就調(diào)用 ld 來完成最后的關(guān)鍵性工作,這個階段就是連接。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢茫瑫r,該程序所調(diào)用到的庫函數(shù)也從各自所在的庫中連到合適的地方。 l 實驗步驟:1. 先用 vi 編輯 hello.c 文件,內(nèi)容如圖所示。2. gcc 命令的一般格式為:gcc 選項 要編

4、譯的文件 選項目標(biāo)文件。 下面使用命令 gcc hello.c o hello,編譯 hello.c,并生成可執(zhí)行文件 hello,并使用命令./hello來執(zhí)行。要求截圖:注意: 上面的命令將.c文件生成了可執(zhí)行文件,實際上是將預(yù)處理、編譯、匯編、連接一步完成,下面我們將介紹四個流程分別做了什么工作。3. 使用-E 選項,執(zhí)行預(yù)處理工作。使用命令 gcc -E hello.c -o hello.i 對 hello.c 進(jìn)行預(yù)處理,生成文件 hello.i。要求截圖:使用命令 cat hello.i 查看 hello.i 文件的內(nèi)容,可以看到頭文件stdio.h 中包含的內(nèi)容替換掉了原先代碼中

5、的#include <stdio.h>。4. 使用-S 選項,執(zhí)行編譯處理工作。使用命令 gcc -S hello.i -o hello.s 對 hello.i進(jìn)行編譯,生成匯編文件 hello.s。要求截圖:使用命令 cat hello.s 查看 hello.s 文件的內(nèi)容,可以看到原來的c 語言代碼已被轉(zhuǎn)化為匯編代碼。5. 使用-c 選項,執(zhí)行編譯工作。使用命令 gcc -c hello.s -o hello.o 對 hello.s 進(jìn)行匯編,生成目標(biāo)文件 hello.o。要求截圖:6. 使用命令 gcc hello.o -o hello 將 hello.o 鏈接庫,生成可執(zhí)行

6、文件 hello,并使用命令./hello來執(zhí)行。要求截圖:以上四個步驟就對應(yīng)了 gcc 執(zhí)行過程的四個基本步驟,下面我們來看看 gcc其他一些重要的選項。7. 使用-static 選項,靜態(tài)鏈接庫。使用命令 gcc hello.c -o hello 和 gcc hello.c -o -static hello1 分別生成兩個可執(zhí)行文件 hello和 hello1。第一個文件 hello 是不加-static 選項,默認(rèn)是鏈接動態(tài)庫生成的,利用命令ls l(注l是小字字母l)比較鏈接動態(tài)庫生成的文件 hello 和鏈接靜態(tài)庫生成的文件 hello1 的大小。要求截圖:8. 使用-g 選項,在可執(zhí)行程序中包含標(biāo)準(zhǔn)調(diào)試信息。使用命令 gcc -g hello.c -o hello2 生成包含調(diào)試信息的文件 hello2,帶有調(diào)試信息的可執(zhí)行文件可以使用 gdb 調(diào)試器進(jìn)行調(diào)試。要求截圖:9. 使用-D 選項,在編譯時進(jìn)行宏定義。使用命令 gcc -DLINUX hello.c -o hello3生成定義了宏 LINUX 的的可執(zhí)行文件 hello3, 將 hello3 和原可執(zhí)行文件 hello

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論