




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
講師:楊行系列課程—Linux基礎源代碼的編譯和調試第六章課程目標具備搭建linux系統平臺能力系統安裝具備Linux系統日常維護能力文件,目錄結構linux的常用命令,ViShell腳本編程、管道及其重定向tftp,nfs服務器的配置熟悉Linux系統下的開發環境Gcc,Gdb課程安排第一天
上午:Linux系統簡介和安裝下午:Linux安裝實際演練第二天
上午:Linux基本操作命令下午:Linux基本操作命令實戰第三天上午:Linux進程操作
下午:Linux服務器配置第四天
上午:Linux腳本編程上下午:Linux腳本編程下第五天
上午:源代碼編譯和調試下午:多模塊軟件的編譯和鏈接(預科內容,根據實際情況調整授課天數,4-10天)課前提問Linux之下常見的編輯工具有哪些?C語言如何編譯、鏈接?默認生成的C語言可執行文件名是什么?如何調試源程序?本章目標Linux下的常用編輯工具GCC編譯環境GDB調試環境6文本編輯器的作用Linux系統中的配置文件以文本文件的形式保存Linux管理員需要通過編輯配置文件進行系統管理文本編輯器的分類行編輯器與全屏幕編輯器字符界面編輯器與圖形界面編輯器知識點1-常見的文本編輯器7viLinux學習者需要掌握的第一個文本編輯器大多數Linux系統中缺省使用的文本編輯器
Emacs用于編輯程序源代碼文件的文本編輯器nano在字符界面提供了菜單操作,易用性較好geditGNOME圖形環境中的文本編輯器常見的文本編輯器8vi編輯器中有三種狀態模式命令模式輸入模式末行模式Shell提示符退出vivifile末行模式輸入模式轉義命令按[Esc]鍵文本輸入命令執行完畢或按[Esc]鍵命令模式vi中三種模式的轉換常見的文本編輯器-VI9vi編輯器的啟動與退出文件操作光標移動操作編輯操作查找與替換操作vi編輯器的在線幫助常見的文本編輯器-VI10直接進入編輯環境$vi進入編輯環境并打開(新建)文件$vimyfile退出vi編輯環境輸入末行命令放棄對文件的修改,并退出編輯器:q!
vi的啟動與退出常見的文本編輯器-VI11讀取文件保存文件另存為文件退出vi編輯器常見的文本編輯器-VI12保存文件保存對vi編輯器中已打開文件的修改:w另存為文件將vi編輯器中的內容另存為指定文件名:wmyfile常見的文本編輯器-VI13未修改退出沒有對vi編輯器中打開的文件進行修改,或已對修改進行了保存,直接退出vi編輯器:q保存并退出對vi編輯器中的文件進行保存并退出vi編輯器:wq不保存退出放棄對文件內容的修改,并退出vi編輯器:q!常見的文本編輯器-VI14編譯工具:把一個源程序編譯為一個可執行程序調試工具:能對執行程序進行源碼或匯編級調試軟件工程工具:用于協助多人開發或大型軟件項目的管理,如make、CVS、Subvision其他工具:用于把多個目標文件鏈接成可執行文件的鏈接器,或者用作格式轉換的工具。知識點1-編譯工具GCChttp:///http:///http:///http:///http:///http:///index.php15編譯工具GCC-參考資源16全稱為GNUCC,GNU項目中符合ANSIC標準的編譯系統編譯如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多種語言GCC是可以在多種硬體平臺上編譯出可執行程序的超級編譯器,其執行效率與一般的編譯器相比平均效率要高20%~30%一個交叉平臺編譯器,適合在嵌入式領域的開發編譯編譯工具GCC17GNUCompilerCollectionC,C++,Objective-C,Fortran,Java,Adahttp://GCC4.3.0GCC2.95July31,1999GCC3.0June18,2001GCC3.2August14,2002GCC3.3May13,2003Mar5,2008December3,1997編譯工具GCC18GCC編譯過程GCC的編譯流程分為四個步驟:預處理(Pre-Processing)編譯(Compiling)匯編(Assembling)鏈接(Linking)編輯器預處理器編譯器鏈接匯編處理源代碼*.c預處理文件*.i匯編文件*.s匯編文件*.o可執行程序*.exe19gcc所支持后綴名解釋.c C原始程序.C/.cc/.cxx C++原始程序.m Objective-C原始程序.i 已經過預處理的C原始程序.ii 已經過預處理的C++原始程序.s/.S 匯編語言原始程序.h 預處理文件(頭文件).o 目標文件.a/.so 編譯后的庫文件編譯工具GCC分析器:分析器將源語言程序代碼轉換為匯編語言。因為要從一種格式轉換為另一種格式(C到匯編),所以分析器需要知道目標機器的匯編語言。匯編器:匯編器將匯編語言代碼轉換為CPU可以執行字節碼。鏈接器:鏈接器將匯編器生成的單獨的目標文件組合成可執行的應用程序。鏈接器需要知道這種目標格式以便工作。標準C庫:核心的C函數都有一個主要的C庫來提供。如果在應用程序中用到了C庫中的函數,這個庫就會通過鏈接器和源代碼連接來生成最終的可執行程序。編譯工具GCC21調用cpp進行預處理,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析;調用cc1進行編譯,生成.o為后綴的目標文件;調用as進行匯編,匯編語言文件經過預編譯和匯編之后都生成以.o為后綴的目標文件;調用ld進行鏈接,所有的目標文件被安排在可執行程序中的恰當的位置。同時,該程序所調用到的庫函數也從各自所在的檔案庫中鏈接到合適的地方。編譯工具GCC22Gcc最基本的用法是∶gcc[options][filenames]-c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標文件,通常用于編譯不包含主程序的子程序文件。-ooutput_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。-O,對程序進行優化編譯、連接,采用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。-O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。-Ldirname,將dirname所指出的目錄加入到程序函數檔案庫文件的目錄列表中,是在鏈接過程中使用的參數。編譯工具GCC第一類∶C語法錯誤錯誤信息∶文件source.c中第n行有語法錯誤(syntex
errror)。有些情況下,一個很簡單的語法錯誤,gcc會給出一大堆錯誤,我們最主要的是要保持清醒的頭腦,不要被其嚇倒,必要的時候再參考一下C語言的基本教材。第二類∶頭文件錯誤錯誤信息∶找不到頭文件head.h(Cannotfindincludefilehead.h)。這類錯誤是源代碼文件中的包含頭文件有問題,可能的原因有頭文件名錯誤、指定的頭文件所在目錄名錯誤等,也可能是錯誤地使用了雙引號和尖括號。
23編譯工具GCC-錯誤類型及應對方法第三類∶檔案庫錯誤錯誤信息∶鏈接程序找不到所需的函數庫(ld:-lm:Nosuchfileordirectory)。這類錯誤是與目標文件相連接的函數庫有錯誤,可能的原因是函數庫名錯誤、指定的函數庫所在目錄名稱錯誤等,檢查的方法是使用find命令在可能的目錄中尋找相應的函數庫名,確定檔案庫及目錄的名稱并修改程序中及編譯選項中的名稱。
24編譯工具GCC-錯誤類型及應對方法第四類∶未定義符號錯誤信息∶有未定義的符號(Undefinedsymbol)。這類錯誤是在連接過程中出現的,可能有兩種原因∶一是使用者自己定義的函數或者全局變量所在源代碼文件,沒有被編譯、連接,或者干脆還沒有定義,這需要使用者根據實際情況修改源程序,給出全局變量或者函數的定義體;二是未定義的符號是一個標準的庫函數,在源程序中使用了該庫函數,而連接過程中還沒有給定相應的函數庫的名稱,或者是該檔案庫的目錄名稱有問題,這時需要使用檔案庫維護命令ar檢查我們需要的庫函數到底位于哪一個函數庫中,確定之后,修改gcc連接選項中的-l和-L項。25編譯工具GCC-錯誤類型及應對方法#include<stdio.h>int
main(void){int
i,j;j=0;i=j+1;printf(“hello,world\n”);printf(“theresultis%d\n”,i);}編譯:$gcc–otesttest.c執行:$./test查看更詳細的信息:
$gcc–v–otesttest.c
26編譯工具GCC-使用實例27Pre-processor
(cpp/
Gcc-E)Compiler(cc1/
Gcc-S)Assembler(as/
Gcc-c)Linker(ld)
hello.c
(text)hello.i
(text)hello.s
(text)hello.o
(binary)hello
(binary)printf.o
(binary)編譯工具GCC-使用實例$gcc–Etest.c-otest.i
用wc命令,查看這兩個階段代碼大小:$wc
test.c
test.cpp916127test.c842193416498test.cpp851195016625總用量test.cpp比test.c增加了很多內容,主要是放在系統提供的include文件中的。28編譯工具GCC-生成預處理代碼檢查語法錯誤,并生成匯編文件$gcc–Stest.c–otest.s
29編譯工具GCC-生成匯編代碼方法一,用gcc直接從C源代碼中生成目標代碼:$gcc–ctest.s–otest.o方法二,用匯編器從匯編代碼生成目標代碼:$astest.s–otest.o
30編譯工具GCC-生成目標代碼將目標程序鏈接庫資源,生成可執行程序$gcc–ctest.s–otest./test編譯工具GCC-生成可執行程序設計并實現一個程序MyPWD,能夠查詢當前用戶的絕對路徑。功能類似與shell的pwd命令。#include<limits.h>#include<iostream>#include<unistd.h>Usingnamespacestd;Int
main(void){Charcur_work_dir[PATH_MAX];Cout<<“CurrentMaxPathLengthis”<<PATH_MAX<<endl;If(getcwd(cur_work_dir,PATH_MAX)==NULL){Perror(“Couldn’tgetcurrentworkingdirectory!”);Return1;}Cout<<“Currentworkingdirectoryis”<<cur_work_dir<<endl;Return0;}編譯工具GCC-練習題33首先使用gcc對test.c進行編譯,注意一定要加上選項‘-g’#
gcc-gtest.c-otest
#
gdbtest
GNUgdbRedHatLinux(-1.21rh)Copyright2004FreeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.Thereisabsolutelyn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西安外國語大學《服裝工業樣板》2023-2024學年第二學期期末試卷
- 天津城市職業學院《電機原理與電機拖動》2023-2024學年第二學期期末試卷
- 河南機電職業學院《工程倫理1》2023-2024學年第二學期期末試卷
- 新疆司法警官職業學院《中學教案分析實踐》2023-2024學年第二學期期末試卷
- 山東電力高等專科學校《高分子基礎》2023-2024學年第二學期期末試卷
- 長沙文創藝術職業學院《經濟法實務》2023-2024學年第二學期期末試卷
- 湖南高爾夫旅游職業學院《化工原理(一)》2023-2024學年第二學期期末試卷
- 深圳信息職業技術學院《現代大地測量學》2023-2024學年第二學期期末試卷
- 江西衛生職業學院《硬件描述語言與數字系統設計》2023-2024學年第二學期期末試卷
- 東莞城市學院《單片機課程設計》2023-2024學年第二學期期末試卷
- 國開(遼寧)2024年《中國傳統文化概觀》形考1-4答案
- 債權投資協議范本標準版
- DZ∕T 0221-2006 崩塌、滑坡、泥石流監測規范(正式版)
- 醫學檢驗項目管理制度
- DBJ-T 15-98-2019 建筑施工承插型套扣式鋼管腳手架安全技術規程
- MOOC 統計學-南京審計大學 中國大學慕課答案
- 高考作文標準方格紙-A4-可直接打印
- 《陸上風電場工程設計概算編制規定及費用標準》(NB-T 31011-2019)
- 毛澤東詩詞鑒賞
- 肛腸科的中醫特色護理【醫院中醫護理及保健知識】
- 《高溫熔融金屬吊運安全規程》(AQ7011-2018)
評論
0/150
提交評論