![嵌入式Linux應用開發(fā)教程 第二章嵌入式linux C語言開發(fā)工具新_第1頁](http://file4.renrendoc.com/view/910d01d2afbe3f3a0b62e0e299610fc3/910d01d2afbe3f3a0b62e0e299610fc31.gif)
![嵌入式Linux應用開發(fā)教程 第二章嵌入式linux C語言開發(fā)工具新_第2頁](http://file4.renrendoc.com/view/910d01d2afbe3f3a0b62e0e299610fc3/910d01d2afbe3f3a0b62e0e299610fc32.gif)
![嵌入式Linux應用開發(fā)教程 第二章嵌入式linux C語言開發(fā)工具新_第3頁](http://file4.renrendoc.com/view/910d01d2afbe3f3a0b62e0e299610fc3/910d01d2afbe3f3a0b62e0e299610fc33.gif)
![嵌入式Linux應用開發(fā)教程 第二章嵌入式linux C語言開發(fā)工具新_第4頁](http://file4.renrendoc.com/view/910d01d2afbe3f3a0b62e0e299610fc3/910d01d2afbe3f3a0b62e0e299610fc34.gif)
![嵌入式Linux應用開發(fā)教程 第二章嵌入式linux C語言開發(fā)工具新_第5頁](http://file4.renrendoc.com/view/910d01d2afbe3f3a0b62e0e299610fc3/910d01d2afbe3f3a0b62e0e299610fc35.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
嵌入式應用程序設計
第二章嵌入式LinuxC語言程序開發(fā)工具
嵌入式Linux下C語言概述2.2編輯器vim2.3編譯器gcc2.4調(diào)試器GDB2.5make工程管理器2.6autotools小結2.9思考與練習本章課程:2023/1/122嵌入式Linux下C語言概述C語言最早是由貝爾實驗室的DennisRitchie為了UNIX的輔助開發(fā)而編寫的,它是在B語言的基礎上開發(fā)出來的。盡管C語言不是專門針對UNIX操作系統(tǒng)或機器編寫的,但它與UNIX系統(tǒng)的關系十分緊密。由于它的硬件無關性和可移植性,使C語言逐漸成為世界上使用最廣泛計算機語言。2023/1/1232.1嵌入式Linux下C語言概述C語言有如下特點:C語言是“中級語言”。它把高級語言的基本結構和語句與低級語言的實用性結合起來。
C語言是結構化的語言。
C語言功能齊全。
C語言可移植性強。2023/1/124嵌入式Linux下C語言概述編輯器常用的編輯器有vi(vim)和Emacs編譯鏈接器常用的編譯器是GCC編譯器調(diào)試器GDB項目管理器項目管理器make2023/1/1252.2編輯器vim2.2.1vi的基本模式2.2.2vi的基本操作2023/1/1262.2.1vi的基本模式標準模式(Normalmode)通常進入vim后默認處于標準模式(或者稱為命令模式)。在此模式下任何鍵盤的輸入都是作為命令來對待。命令的輸入通常是不回顯的,只顯示執(zhí)行的結果。插入模式(InsertMode)用戶只有在插入模式下才可以進行字符輸入,用戶按[Esc]鍵可回到命令行模式下。命令行模式(Command-linemode)在此模式下,用戶可以將文件保存或退出vim,也可以設置編輯環(huán)境,如尋找字符串、列出行號等??梢暷J剑╒isualmode)在此模式下,通過移動光標選擇文本,選中的文本將反白顯示,這樣提供高效、直觀的編輯功能。用戶按下ESC鍵可回到命令行模式。2023/1/1272.2.2vi的基本操作1.vim的進入、保存和退出進入vim可以直接在命令終端下鍵入vim<文件名>,vim可以自動載入所要編輯的文件或是開啟一個新的文件。如在shell中鍵入vim(新建文件)則可進入vim環(huán)境。進入vi后屏幕左方會出現(xiàn)波浪符號,凡是具有該符號就代表此列目前是空的。此時進入的是命令行模式。要退出vim可以在命令行模式下鍵入“:q”(不保存并退出)或“:q!”(不保存并強制退出)或“:wq”(保存并退出)指令則是保存之后再離開(注意冒號)。2023/1/1282.2.2vi的基本操作命令類別命令說明編輯:efilename編輯文件名為filename的文件。若這個文件不存在,則會開啟一個名為filename的新文件的編輯保存:w保存文件,文件應已有名字:wfilename以文件名filename保存文件退出:q退出,如果文件已修改則不能退出:q!不保存強行推出,無論文件是否被修改:wq保存后退出2023/1/1292.2.2vi的基本操作2.光標的移動除了使用標準光標鍵移動光標之外,vim還提供了很多復雜的光標移動方式。命令類別命令說明基本操作h,j,k,l分別等同于左方向鍵、下方向鍵、上方向鍵、右方向健字操作w移至下一個單詞的字首e移至下一個單詞的字尾b移至上一個單詞的字首行操作0移至行首$移至行尾G移至文件尾部gg移至文件首部H移至當前屏幕頂部M移至當前屏幕中間行的行首L移至當前屏幕底部最后一行的行首n-向上移動n行n+向下移動n行nG移至第n行頁操作Ctrl+f屏幕往“上”翻動一頁,等同于PageUpCtrl+b屏幕往“下”翻動一頁,等同于PageDownCtrl+u屏幕往“上”翻動半頁Ctrl+d屏幕往“下”翻動半頁2023/1/12102.2.2vi的基本操作3.文本編輯文本編輯包括輸入、修改、復制、粘貼、刪除(可以用Del鍵和Backspace鍵)和恢復等操作。命令類別命令說明修改r修改光標所在的字符,鍵入r后直接鍵入待修改字符R進入取代狀態(tài),在光標所指定的位置修改字符,該替代狀態(tài)直到按下ESC鍵才結束復制yy復制光標所在行nyy復制光標所在行開始的n行,如3yy表示復制三行y^復制光標至行首y$復制光標至行尾yw復制一個字(單詞)yG復制光標文件尾y1G復制光標文件首粘貼p粘貼至光標后P粘貼至光標前刪除x刪除光標所在位置的一個字符X刪除光標所在位置的前一個字符s刪除光標所在的字符,并進入輸入模式S刪除光標所在的行,并進入輸入模式dd刪除光標所在的行ndd從光標所在行開始向下刪除n行D刪除至行尾,等同于d$dG刪除至文件尾部d1G刪除至文件首部,等同于dgg恢復u撤銷上一步的操作??梢远啻纬蜂NU在光標離開之前,恢復所有的編輯操作Ctrl+r返回至撤銷操作之前的狀態(tài)2023/1/12112.2.2vi的基本操作4.查找與替換vim的查找和替換功能都支持正則表達式,可以匹配非常復雜的關鍵字,功能非常強大。類別命令說明查找/<要查找的字符>向下查找要查找的字符?<要查找的字符>向上查找要查找的字符n繼續(xù)查找N反向查找替換:[range]s/pattern/string/[c,e,g,i]range:指定查找的范圍。例如1,$指替換范圍從第0行到最后一行;s:指轉(zhuǎn)入替換模式;pattern:指要被替換的字符串,可以用正則表達式;string:指替換的字符串;c:每次替換前詢問;e:不顯示錯誤;g:強制整行替換;i:不區(qū)分大小寫2023/1/12122.3編譯器gcc
2.3.1GCC的簡介2.3.2GCC的編譯流程2.3.3GCC的常用編譯選項2023/1/12132.3.1GCC的簡介GNUCC(簡稱為gcc)是GNU項目中符合ANSIC標準的編譯系統(tǒng),能夠編譯用C、C++和ObjectC等語言編寫的程序。gcc不僅功能強大,而且可以編譯如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多種語言,而且gcc又是一個交叉平臺編譯器,支持的硬件平臺很多,如alpha、arm、avr、hppa、i386、m68k、mips、powerpc、sparc、vxworks、x86_64、MSWindows、OS/2等等。它能夠在當前CPU平臺上為多種不同體系結構的硬件平臺開發(fā)軟件,因此尤其適合在嵌入式領域的開發(fā)編譯。2023/1/12142.3.1GCC的簡介gcc的編譯流程分為了4個步驟,分別為:預處理(Pre-Processing)編譯(Compiling)匯編(Assembling)鏈接(Linking)后綴名所對應的語言編譯流程.cC原始程序預處理、編譯、匯編.C/.cc/.cxxC++原始程序預處理、編譯、匯編.mObjective-C原始程序預處理、編譯、匯編.i已經(jīng)過預處理的C原始程序編譯、匯編.ii已經(jīng)過預處理的C++原始程序編譯、匯編.s/.S匯編語言原始程序匯編.h預處理文件(頭文件)(不常出現(xiàn)在指令行).o目標文件鏈接.a/.so編譯后的庫文件鏈接2023/1/12152.3.1GCC的簡介GCC使用的基本語法為:
gcc[option|filename]2023/1/12162.3.2GCC的編譯流程預處理階段處理的主要作用是通過預處理的內(nèi)建功能對一些可預處理資源進行等價替換,最常見的可預處理資源有:文件包含、條件編譯、布局控制和宏處理等。gcc的選項“-E”可以使編譯器在預處理結束時就停止編譯,選項“-o”是指定GCC輸出的結果,其命令格式為如下所示。gcc–E–o[目標文件][編譯文件]例如:$gcc–E–o2023/1/12172.3.2GCC的編譯流程編譯階段編譯器在預處理結束之后,gcc首先要檢查代碼的規(guī)范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤后,就開始把代碼翻譯成匯編語言,gcc的選項“-S”能使編譯器在進行匯編之前就停止。由表可知,“.s”是匯編語言原始程序,因此,此處的目標文件就可設為“.s”類型。$gcc–S–o2023/1/12182.3.2GCC的編譯流程匯編階段匯編階段是把編譯階段生成的“.s”文件生成目標文件,讀者在此使用選項“-c”就可看到匯編代碼已轉(zhuǎn)化為“.o”的二進制目標代碼了。如下所示。$gcc–c–o2023/1/12192.3.2GCC的編譯流程鏈接階段。完成了鏈接之后,gcc就可以生成可執(zhí)行文件,其命令如下所示。$gcc–ohello運行該可執(zhí)行文件,出現(xiàn)正確的結果。$./hellohello,embeddedworld2023/1/12202.3.3gcc的常用編譯選項gcc有超過100個的可用選項,包括總體選項、警告和出錯選項、優(yōu)化選項和體系結構等相關選項。(1)常用選項選項含義-c只編譯匯編不鏈接,生成目標文件“.o”-S只編譯不匯編,生成匯編代碼-E只進行預編譯,不做其他處理-g在可執(zhí)行程序中包含標準調(diào)試信息-ofile將file文件指定為輸出文件-v打印出編譯器內(nèi)部編譯各過程的命令行信息和編譯器的版本-Idir在頭文件的搜索路徑列表中添加dir目錄2023/1/12212.3.3gcc的常用編譯選項(2)庫相關選項選項含義-static進行靜態(tài)編譯,即鏈接靜態(tài)庫,禁止鏈接動態(tài)庫-shared1.可以生成動態(tài)庫文件2.進行動態(tài)編譯,盡可能地鏈接動態(tài)庫,只有當沒有動態(tài)庫時才會鏈接同名的靜態(tài)庫(默認選項,即可省略)-Ldir在庫文件的搜索路徑列表中添加dir目錄-lname鏈接稱為libname.a(靜態(tài)庫)或者libname.so(動態(tài)庫)的庫文件。若兩個庫都存在,則根據(jù)編譯方式(-static還是-shared)而進行鏈接-fPIC(或-fpic)生成使用相對地址的位置無關的目標代碼(PositionIndependentCode)。然后通常使用gcc的-static選項從該PIC目標文件生成動態(tài)庫文件。2023/1/12222.3.3gcc的常用編譯選項(3)警告和出錯選項選項含義-ansi支持符合ANSI標準的C程序-pedantic允許發(fā)出ANSIC標準所列的全部警告信息-pedantic-error允許發(fā)出ANSIC標準所列的全部錯誤信息-w關閉所有警告信息-Wall允許發(fā)出gcc提供的所有有用的報警信息-werror把所有的警告信息轉(zhuǎn)化為錯誤信息,并在警告發(fā)生時終止編譯過程2023/1/12232.3.3gcc的常用編譯選項(4)優(yōu)化選項gcc可以對代碼進行優(yōu)化,它通過編譯選項“-On”來控制優(yōu)化代碼的生成,其中n是一個代表優(yōu)化級別的整數(shù)。對于不同版本的gcc來講,n的取值范圍及其對應的優(yōu)化效果可能并不完全相同,比較典型的范圍是從0變化到2或32023/1/12242.3.3gcc的常用編譯選項(5)體系結構相關選項選項含義-mcpu=type針對不同的CPU使用相應的CPU指令。可選擇的type有i386、i486、pentium及i686等-mieee-fp使用IEEE標準進行浮點數(shù)的比較-mno-ieee-fp不使用IEEE標準進行浮點數(shù)的比較-msoft-float輸出包含浮點庫調(diào)用的目標代碼-mshort把int類型作為16位處理,相當于shortint-mrtd強行將函數(shù)參數(shù)個數(shù)固定的函數(shù)用retNUM返回,節(jié)省調(diào)用函數(shù)的一條指令2023/1/12252.4調(diào)試器GDBGDB是GNU開源組織發(fā)布的一個強大的Linux下的程序調(diào)試工具,它是一種強大的命令行調(diào)試工具。一個合格的調(diào)試器需要有以下幾項基本功能。能夠運行程序,設置所有能影響程序運行的參數(shù)。能夠讓程序讓指定的條件下停止。能夠在程序停止時檢查所有參數(shù)的情況。能夠根據(jù)指定條件改變程序的運行。2023/1/12262.4.1gdb使用流程進入GDB——gdbtest查看文件——l設置斷點——b6查看斷點處情況——infob運行代碼——r查看變量值——pn/pi單步運行——n恢復程序運行——c觀察變量——watchn
退出GDB
——q2023/1/12272.4.2gdb基本命令1.工作環(huán)境相關命令命令格式含義setargs運行時的參數(shù)指定運行時參數(shù),如setargs2showargs查看設置好的運行參數(shù)pathdir設定程序的運行路徑showpaths查看程序的運行路徑setenvironmentvar[=value]設置環(huán)境變量showenvironment[var]查看環(huán)境變量cddir進入到dir目錄,相當于shell中的cd命令pwd顯示當前工作目錄shellcommand運行shell的command命令2023/1/12282.4.2gdb基本命令2.設置斷點與恢復命令命令格式含義infob查看所設斷點break[文件名:]行號或函數(shù)名<條件表達式>設置斷點tbreak[文件名:]行號或函數(shù)名<條件表達式>設置臨時斷點,到達后被自動刪除delete[斷點號]刪除指定斷點,其斷點號為“infob”中的第一欄。若缺省斷點號則刪除所有斷點disable[斷點號]停止指定斷點,使用“infob”仍能查看此斷點。同delete一樣,若缺省斷點號則停止所有斷點enable[斷點號]激活指定斷點,即激活被disable停止的斷點condition[斷點號]<條件表達式>修改對應斷點的條件ignore[斷點號]<num>在程序執(zhí)行中,忽略對應斷點num次step單步恢復程序運行,且進入函數(shù)調(diào)用next單步恢復程序運行,但不進入函數(shù)調(diào)用finish運行程序,直到當前函數(shù)完成返回c繼續(xù)執(zhí)行函數(shù),直到函數(shù)結束或遇到新的斷點2023/1/12292.4.2gdb基本命令3.gdb中源碼查看相關命令命令格式含義list<行號>|<函數(shù)名>查看指定位置代碼file[文件名]加載指定文件forward-search正則表達式源代碼的前向搜索reverse-search正則表達式源代碼的后向搜索dirDIR將路徑DIR添加到源文件搜索的路徑的開頭showdirectories顯示源文件的當前搜索路徑infoline顯示加載到gdb內(nèi)存中的代碼2023/1/12302.4.2gdb基本命令4.gdb中查看運行數(shù)據(jù)相關命令命令格式含義print表達式|變量查看程序運行時對應表達式和變量的值x<n/f/u>查看內(nèi)存變量內(nèi)容。其中n為整數(shù)表示顯示內(nèi)存的長度,f表示顯示的格式,u表示從當前地址往后請求顯示的字節(jié)數(shù)display表達式設定在單步運行或其他情況中,自動顯示的對應表達式的內(nèi)容backtrace或bt查看當前棧偵的情況,即可以查到哪些被調(diào)用的函數(shù)尚未返回。framen打印第n個棧偵inforeg/stack查看寄存器/堆棧使用情況up調(diào)到上一層函數(shù),即上移棧幀down與up相對,即下移棧幀2023/1/12312.4.2gdb基本命令5.gdb中修改運行參數(shù)相關命令gdb還可以修改運行時的參數(shù),并使該變量按照用戶當前輸入的值繼續(xù)運行。它的設置方法為:在單步執(zhí)行的過程中,鍵入命令“set變量=設定值”。2023/1/12322.4.3gdbserver遠程調(diào)試在嵌入式系統(tǒng)開發(fā)中,我們經(jīng)常通過使用交叉調(diào)試工具實現(xiàn)遠程調(diào)試。采用遠程調(diào)試的主要原因是大多數(shù)嵌入式平臺不太適合進行本地調(diào)試,在很多嵌入式平臺上內(nèi)存等資源受限制,并且附帶調(diào)試信息的可執(zhí)行程序往往超過幾兆字節(jié)大小。使用交叉調(diào)試,可以減輕嵌入式平臺的這些負擔。gdb調(diào)試器提供了兩種不同的遠程調(diào)試方法,即stub(插樁)方式和gdbserver方式。這兩種遠程調(diào)試方式是有區(qū)別的。gdbserver本身的體積很小,能夠在具有很小內(nèi)存的目標系統(tǒng)上獨立運行,因而非常適合嵌入式開發(fā)。stub方式則需要通過鏈接器把調(diào)試代理和要調(diào)試的程序鏈接成一個可執(zhí)行的應用程序文件,而且stub需要修改異常處理和驅(qū)動程序等。但gdbserver要求宿主機和目標系統(tǒng)采用同一系列的操作系統(tǒng),而stub沒有這種限制,甚至目標系統(tǒng)可以沒有操作系統(tǒng)。gdbserver比較適合于調(diào)試嵌入式平臺上的應用程序,而stub比較適合于調(diào)試bootloader和內(nèi)核等系統(tǒng)程序。2023/1/12332.4.3gdbserver遠程調(diào)試用gdb+gdbserver的方式調(diào)試嵌入式平臺上的Linux應用程序安裝arm-linux-gdb安裝gdbserver遠程調(diào)試2023/1/12342.5make工程管理器2.5.1Makefile基本結構2.5.2Makefile變量2.5.3Makefile規(guī)則2.5.4make管理器的使用2023/1/12352.5.1Makefile基本結構在一個Makefile中通常包含如下內(nèi)容。需要由make工具創(chuàng)建的目標體(target),目標體通常是目標文件、可執(zhí)行文件或是一個標簽。要創(chuàng)建的目標體所依賴的文件(dependency_file)。創(chuàng)建每個目標體時需要運行的命令(command)。它的格式為:
target:dependency_filescommand2023/1/12362.5.2Makefile變量命令格式含義AR庫文件維護程序的名稱,默認值為arAS匯編程序的名稱,默認值為asCCC編譯器的名稱,默認值為ccCPPC預編譯器的名稱,默認值為$(CC)–ECXXC++編譯器的名稱,默認值為g++FCFORTRAN編譯器的名稱,默認值為f77RM文件刪除程序的名稱,默認值為rm–fARFLAGS庫文件維護程序的選項,無默認值ASFLAGS匯編程序的選項,無默認值CFLAGSC編譯器的選項,無默認值CPPFLAGSC預編譯的選項,無默認值CXXFLAGSC++編譯器的選項,無默認值FFLAGSFORTRAN編譯器的選項,無默認值Makefile中常見預定義變量2023/1/12372.5.2Makefile變量命令格式含義$*不包含擴展名的目標文件名稱$+所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復的依賴文件$<第一個依賴文件的名稱$?所有時間戳比目標文件晚的依賴文件,并以空格分開$@目標文件的完整名稱$^所有不重復的依賴文件,以空格分開$%如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱Makefile中常見自動變量2023/1/12382.5.3Makefile規(guī)則隱式規(guī)則隱含規(guī)則能夠告訴make怎樣使用傳統(tǒng)的技術完成任務,這樣,當用戶使用它們時就不必詳細指定編譯的具體細節(jié),而只需把目標文件列出即可。make會自動搜索隱式規(guī)則目錄來確定如何生成目標文件。
make的隱式規(guī)則指出:所有“.o”文件都可自動由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-c–o”生成。2023/1/12392.5.3Makefile規(guī)則隱式規(guī)則對應語言后綴名規(guī)則C編譯:.c變?yōu)?o$(CC)–c$(CPPFLAGS)$(CFLAGS)C++編譯:.cc或.C變?yōu)?o$(CXX)-c$(CPPFLAGS)$(CXXFLAGS)Pascal編譯:.p變?yōu)?o$(PC)-c$(PFLAGS)Fortran編譯:.r變?yōu)?o$(FC)-c$(FFLAGS)。Makefile中常見隱式規(guī)則目錄2023/1/12402.5.3Makefile規(guī)則模式規(guī)則模式規(guī)則不同于隱式規(guī)則,是用來定義相同處理規(guī)則的多個文件的,模式規(guī)則能引入用戶自定義變量,為多個文件建立相同的規(guī)則,簡化Makefile的編寫。模式規(guī)則的格式類似于普通規(guī)則,這個規(guī)則中的相關文件前必須用“%”標明。OBJS=CC=gccCFLAGS=-Wall-O-gdavid:$(OBJS)
$(CC)$^-o$@%.o:%.c
$(CC)$(CFLAGS)-c$<-o$@2023/1/12412.5.4make使用命令格式含義-Cdir讀入指定目錄下的Makefile-ffile讀入當前目錄下的file文件作為Makefile-i忽略所有的命令執(zhí)行錯誤-Idir指定被包含的Makefile所在目錄-n只打印要執(zhí)行的命令,但不執(zhí)行這些命令-p顯示make變量數(shù)據(jù)庫和隱含規(guī)則-s在執(zhí)行命令時不顯示命令-w如果make在執(zhí)行過程中改變目錄,打印當前目錄名2023/1/12422.6autotoolsautotools系列工具只需用戶輸入簡單的目標文件、依賴文件、文件目錄等就可以輕松地生成makefile了這些工具還可以完成系統(tǒng)配置信息的收集,從而可以方便地處理各種移植性的問題。2023/1/12432.6.1autotools使用流程2023/1/12442.6.2使用autotools所生成的makefileautotools生成的makefile除具有普通的編譯功能外,還具有以下主要功能:makemakeinstallmakecleanmakedist2023/1/12452.7實驗內(nèi)容2.7.1vim使用練習2.7.2用gdb調(diào)試程序的bug2.7.3編寫包含多文件的makefile2.7.4使用autotools生成包含多文件的makefile2023/1/12462.7.1vim使用練習實驗目的通過指定指令的vim操作練習,使讀者能夠熟練使用vim中的常見操作,并且熟悉vim的幾種模式,如果讀者能夠熟練掌握實驗內(nèi)容中所要求的內(nèi)容,則表明對vim的操作已經(jīng)很熟練了。實驗內(nèi)容(11)將光標移動到最后一行的行尾。(12)粘貼復制行的內(nèi)容。(13)光標移到“”。(14)刪除該行。(15)存盤但不退出。(16)將光標移到首行。(17)插入模式下輸入“Hello,thisisviworld!”。(18)返回命令行模式。(19)向下查找字符串“0:wait”。(20)再向上查找字符串“halt”。(21)強制退出vim,不存盤。(1)在“/root”目錄下建一個名為“vim”的目錄。(2)進入“vim”目錄。(3)將文件“/etc/inittab”復制到“vim”目錄下。(4)使用vim打開“vim”目錄下的inittab。(5)設定行號,指出設定initdefault(類似于“id:5:initdefault”)的所在行號。(6)將光標移到該行。(7)復制該行內(nèi)容。(8)將光標移到最后一行行首。(9)粘貼復制行的內(nèi)容。(10)撤銷第9步的動作。分別指出每個命令處于何種模式下?2023/1/12472.7.2用gdb調(diào)試程序的bug實驗目的通過調(diào)試一個有問題的程序,使讀者進一步熟練使用vi操作,而且熟練掌握gcc編譯命令及gdb的調(diào)試命令,通過對有問題程序的跟蹤調(diào)試,進一步提高發(fā)現(xiàn)問題和解決問題的能力。這是一個很小的程序,希望讀者認真調(diào)試。實驗內(nèi)容(1)使用vi編輯器,將以下代碼輸入到名為的文件中。(2)使用gcc編譯這段代碼,注意要加上“-g”選項以方便之后的調(diào)試。(3)運行生成的可執(zhí)行文件,觀察運行結果。(4)使用gdb調(diào)試程序,通過設置斷點、單步跟蹤,一步步找出錯誤所在。(5)糾正錯誤,更改源程序并得到正確的結果。
2023/1/12482.7.3編寫包含多文件的makefile實驗目的通過對包含多文件的makefile的編寫,熟悉各種形式的makefile,并且進一步加深對makefile中用戶自定義變量、自動變量及預定義變量的理解。實驗內(nèi)容(1)用vi在同一目錄下編輯兩個簡單的hello程序(2)仍在同一目錄下用vim編輯makefile,且不使用變量替換,用一個目標體實現(xiàn)(即直接將和編譯成hello目標體)。然后用make驗證所編寫的makefile是否正確。(3)將上述makefile使用變量替換實現(xiàn)。同樣用make驗證所編寫的makefile是否正確。(4)編輯另一個makefile,取名為makefile1,不使用變量替換,但用兩個目標體實現(xiàn)(也就是首先將和編譯為,再將編譯為hello),再用make的“-f”選項驗證這個makefile1的正確性。(5)將上述makefile1使用變量替換實現(xiàn)。2023/1/12492.7.4使用autotools生成包含多文件的makefile實驗目的通過使用autotools生成包含多文件的makefile,進一步掌握autotools的使用方法。同時,掌握Linux下安裝軟件的常用方法。實驗過程(9)使用automake生成。(10)使用configure生成makefile。(11)使用make生成hello可執(zhí)行文件,并在當前目錄下運行hello查看結果。(12)使用makeinstall將hello安裝到系統(tǒng)目錄下,并運行,查看結果。(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省日照市高三下學期3月模擬考試語文試題(含答案)
- 工程車運輸簡單合同
- 2025合同模板化工產(chǎn)品購銷合同范本
- 洗煤廠承包合同
- 商鋪個人租房合同
- 職稱聘任合同書
- 演講稿格式及范文二十-多篇
- 提升學習能力
- 農(nóng)產(chǎn)品產(chǎn)銷對接合作合同
- 二手房獨家代理合同
- 《共情的力量》課件
- 2022年中國電信維護崗位認證動力專業(yè)考試題庫大全-上(單選、多選題)
- 《電氣作業(yè)安全培訓》課件
- 水平二(四年級第一學期)體育《小足球(18課時)》大單元教學計劃
- 《關于時間管理》課件
- 醫(yī)藥高等數(shù)學智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學
- 城市道路智慧路燈項目 投標方案(技術標)
- 水泥采購投標方案(技術標)
- 醫(yī)院招標采購管理辦法及實施細則(試行)
- 初中英語-Unit2 My dream job(writing)教學設計學情分析教材分析課后反思
- 廣州市勞動仲裁申請書
評論
0/150
提交評論