版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 Linux編程環(huán)境farsight2本章內(nèi)容包括常用的本章內(nèi)容包括常用的Linux開發(fā)工具使用技巧和開發(fā)工具使用技巧和Linux編程技術(shù)。本章內(nèi)容比編程技術(shù)。本章內(nèi)容比Linux編程方面的書編程方面的書籍簡(jiǎn)略得多,重點(diǎn)介紹常用的籍簡(jiǎn)略得多,重點(diǎn)介紹常用的Linux編程工具和技編程工具和技巧。通過本章學(xué)習(xí)可以使讀者快速掌握基本的巧。通過本章學(xué)習(xí)可以使讀者快速掌握基本的Linux開發(fā)工具,為后續(xù)的嵌入式開發(fā)工具,為后續(xù)的嵌入式Linux開發(fā)打下開發(fā)打下基礎(chǔ)?;A(chǔ)。 本章目標(biāo)常用Linux編程工具 GNU工具鏈的使用技巧 Linux編程庫(kù)的API介紹 3.1 Linux常用工具常用工具3.1
2、.1 Shell簡(jiǎn)介簡(jiǎn)介在在Linux系統(tǒng)開發(fā)過程中,開發(fā)者或者用戶與系統(tǒng)開發(fā)過程中,開發(fā)者或者用戶與Linux系統(tǒng)內(nèi)核進(jìn)行交互的時(shí)候需要一個(gè)平臺(tái)系統(tǒng)內(nèi)核進(jìn)行交互的時(shí)候需要一個(gè)平臺(tái),這就是,這就是Shell,有了它,用戶就能通過鍵盤輸入,有了它,用戶就能通過鍵盤輸入與系統(tǒng)進(jìn)行交互了。與系統(tǒng)進(jìn)行交互了。單從字面意思上理解,單從字面意思上理解,Shell的本意是的本意是“殼的意思?xì)さ囊馑?,通俗地講就是內(nèi)部核心與外部使用者發(fā)生聯(lián)系,通俗地講就是內(nèi)部核心與外部使用者發(fā)生聯(lián)系的介質(zhì)。的介質(zhì)。Shell工作示意圖Shell提供了用戶與操作系統(tǒng)之間通訊的方式。這種通信可以以交互方式從鍵盤輸入,并且可以立即得
3、到響應(yīng)),或者以Shell script非交互方式執(zhí)行。Shell本身又是一個(gè)解釋型的程序,也是一種編程語言,Shell程序設(shè)計(jì)語言支持絕大多數(shù)在高級(jí)語言中能見到的程序元素,如函數(shù)、變量、數(shù)組和程序控制結(jié)構(gòu)。3.1.2 常用常用Shell命令命令1Shell命令的一般格式命令名 【選項(xiàng)】 【參數(shù)1】 【參數(shù)2】命令行輸入實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在命令行中就可以輸入Shell命令了。在按“回車鍵以確認(rèn)當(dāng)前操作之前,可以對(duì)輸入的內(nèi)容進(jìn)行編輯。2命令行輸入命令行輸入命令行輸入實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū)命令行輸入實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在命令行中就可以輸入,在命令行中就可以輸
4、入Shell命令了。在按命令了。在按“回回車鍵以確認(rèn)當(dāng)前操作之前,可以對(duì)輸入的內(nèi)容車鍵以確認(rèn)當(dāng)前操作之前,可以對(duì)輸入的內(nèi)容進(jìn)行編輯。進(jìn)行編輯。3常用Shell命令介紹3常用Shell命令介紹(1輸入命令行自動(dòng)補(bǔ)齊automatic command line completion功能(2對(duì)目錄和文件的操作(3用戶管理(4文件的打包和壓縮(5rpm軟件包的安裝(6源碼維護(hù)基本命令 diff命令(7配置、編譯、安裝源碼包軟件(8中斷Shell命令執(zhí)行的方法(9模塊管理指令3.1.3 編寫編寫Shell腳本腳本Shell不僅僅是命令的執(zhí)行,而且是一種編程語言,它提供了定義變量和參數(shù)的手段以及豐富的程序
5、控制結(jié)構(gòu) 1建立腳本建立腳本編輯編輯Shell腳本文件使用腳本文件使用Linux下的普通編輯器如下的普通編輯器如vi、Emacs等即可。等即可。Linux下的下的Shell默認(rèn)采用默認(rèn)采用Bash,所以本書也主要以所以本書也主要以Bash腳本為例介紹腳本為例介紹2Shell變量變量Shell腳本中主要有以下幾種變量:系統(tǒng)變量,環(huán)腳本中主要有以下幾種變量:系統(tǒng)變量,環(huán)境變量,用戶變量境變量,用戶變量 3流程控制流程控制同傳統(tǒng)的編程語言一樣,同傳統(tǒng)的編程語言一樣,Shell提供了很多特性,提供了很多特性,如數(shù)據(jù)變量、參數(shù)傳遞、判別、流程控制、數(shù)據(jù)如數(shù)據(jù)變量、參數(shù)傳遞、判別、流程控制、數(shù)據(jù)輸入和輸出
6、、子程序及以中斷處理等。輸入和輸出、子程序及以中斷處理等。4Shell腳本的執(zhí)行腳本的執(zhí)行如果已經(jīng)寫好如果已經(jīng)寫好Shell腳本,運(yùn)行該腳本可以有以下腳本,運(yùn)行該腳本可以有以下的幾種方法。的幾種方法。(1設(shè)置好腳本的執(zhí)行權(quán)限之后再執(zhí)行腳本設(shè)置好腳本的執(zhí)行權(quán)限之后再執(zhí)行腳本(2使用使用Bash內(nèi)部指令內(nèi)部指令source(3直接使用直接使用sh命令來執(zhí)行命令來執(zhí)行3.1.4 正則表達(dá)式正則表達(dá)式正則表達(dá)式是一種可以用于模式匹配和替換的有正則表達(dá)式是一種可以用于模式匹配和替換的有效工具。正則表達(dá)式描述了一種字符串匹配的模效工具。正則表達(dá)式描述了一種字符串匹配的模式,可以用來檢查一個(gè)串是否含有某種子
7、串、將式,可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串做替換或者從某個(gè)串中取出符合某個(gè)匹配的子串做替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。條件的子串等。正則表達(dá)式由普通字符例如字符正則表達(dá)式由普通字符例如字符a到到z以及特以及特殊字符稱為特殊字符組成特定文字模式。當(dāng)殊字符稱為特殊字符組成特定文字模式。當(dāng)從一個(gè)文件或命令中抽取或者過濾文本時(shí),使用從一個(gè)文件或命令中抽取或者過濾文本時(shí),使用正則表達(dá)式可以簡(jiǎn)化命令中的匹配表達(dá)。正則表達(dá)式可以簡(jiǎn)化命令中的匹配表達(dá)。3.1.5 程序編輯器程序編輯器編輯器是系統(tǒng)的重要工具之一,在各種操作系統(tǒng)中,編輯器都是必不可少的部件。Linux系統(tǒng)提供了一個(gè)完整
8、的編輯器家族系列,如Ed、Ex、Vi和Emacs等,按功能它們可以分為兩大類。 行編輯器如Ed、Ex) 全屏幕編輯器如Vi、Emacs)Vi有3種基本工作模式:指令行模式、文本輸入模式、末行模式,它們的相互關(guān)系如下。3.2 Makefile3.2.1 GNU makeGNU make最初是最初是Unix系統(tǒng)下的一個(gè)工具,設(shè)計(jì)系統(tǒng)下的一個(gè)工具,設(shè)計(jì)之初是為了維護(hù)之初是為了維護(hù)C程序文件不必要的重新編譯,它程序文件不必要的重新編譯,它是一個(gè)自動(dòng)生成和維護(hù)目標(biāo)程序的工具。是一個(gè)自動(dòng)生成和維護(hù)目標(biāo)程序的工具。make是一個(gè)解釋是一個(gè)解釋Makefile文件中指令的命令工具文件中指令的命令工具,其最基本
9、的功能就是通過,其最基本的功能就是通過Makefile文件來描述文件來描述源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作,它源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作,它會(huì)告知系統(tǒng)以何種方式編譯和鏈接程序。會(huì)告知系統(tǒng)以何種方式編譯和鏈接程序。通常狀況之下GNU make的工作流程如下。 查找當(dāng)前目錄下的Makefile文件 初始化文件中的變量 分析Makefile中的所有規(guī)則 為所有的目標(biāo)文件創(chuàng)建依賴關(guān)系 根據(jù)依賴關(guān)系,決定哪些目標(biāo)文件要重新生成 執(zhí)行生成命令3.2.2 Makefile規(guī)則語法規(guī)則語法Makefile有其自身特定的編寫格式并且遵循一定的語法規(guī)則。#注釋目標(biāo)文件:依賴文件列表.命令列表.3
10、.2.3 Makefile文件中變量的使用文件中變量的使用一般來說,Makefile文件中變量的應(yīng)用主要有以下幾個(gè)方面。1代表一個(gè)文件列表Makefile文件中的變量常常存儲(chǔ)一些目標(biāo)文件甚至是目標(biāo)文件的依賴文件,引用這些文件的時(shí)候引用存儲(chǔ)這些文件的變量即可,這給Makefile編寫和維護(hù)者帶來了很大的方便。2代表編譯命令選項(xiàng)所有編譯命令都帶有相同編譯選項(xiàng)時(shí)比如-Wall -O2等),可以將該編譯選項(xiàng)賦給一個(gè)變量,這樣方便了引用。同時(shí),如果改變編譯選項(xiàng)的時(shí)候,只需改變?cè)撟兞恐导纯?,而不必在每處用到編譯選項(xiàng)的地方都做改動(dòng)。3.3 二進(jìn)制代碼工具的使用二進(jìn)制代碼工具的使用3.3.1 GNU Binu
11、tils工具介紹工具介紹在在Linux下建立嵌入式交叉編譯環(huán)境要用到一系列下建立嵌入式交叉編譯環(huán)境要用到一系列的工具鏈的工具鏈tool-chain),主要有比如),主要有比如GNU Binutils、Gcc、Glibc、Gdb等,它們都屬于等,它們都屬于GNU的工具集。的工具集。GNU Binutils工具集里主要有以下一工具集里主要有以下一系列的部件。系列的部件。 as GNU的匯編器的匯編器 ld GNU的鏈接器的鏈接器 add2line 將地址轉(zhuǎn)換成文件名或行號(hào)對(duì),以便將地址轉(zhuǎn)換成文件名或行號(hào)對(duì),以便調(diào)試程序調(diào)試程序 ar 從文件中創(chuàng)建、修正、擴(kuò)展文件從文件中創(chuàng)建、修正、擴(kuò)展文件 gas
12、p 匯編宏處理器匯編宏處理器 nm 從目標(biāo)代碼文件中列舉所有變量包括變量值和變量類型),如果沒有指定目標(biāo)文件,則默認(rèn)是a.out文件 objcopy objcopy工具使用GNU BSD庫(kù),它可以把目標(biāo)文件的內(nèi)容從一種文件格式復(fù)制到另一種格式的目標(biāo)文件中 add2line 把程序地址轉(zhuǎn)換為文件名和行號(hào) objdump 顯示目標(biāo)文件信息 readelf 顯示elf文件信息 ranlib 生成索引以加快對(duì)歸檔文件的訪問,并將其保存到這個(gè)歸檔文件中 size 列出目標(biāo)模塊或文件的代碼尺寸 strings 打印可打印的目標(biāo)代碼字符至少4個(gè)字符),打印字符多少可以控制 strip 放棄所有符號(hào)連接 c+
13、filt 鏈接器ld使用該命令可以過濾C+符號(hào)和Java符號(hào),防止重載函數(shù)沖突 gprof 顯示程序調(diào)用段的各種數(shù)據(jù)3.3.2 Binutils工具軟件使用工具軟件使用1匯編器匯編器 Linux平臺(tái)的標(biāo)準(zhǔn)匯編器是平臺(tái)的標(biāo)準(zhǔn)匯編器是GAS,它是,它是GCC所依賴所依賴的后臺(tái)匯編工具,通常包含在的后臺(tái)匯編工具,通常包含在binutils 軟件包中。軟件包中。2鏈接器鏈接器GNU鏈接器使用一個(gè)命令語言腳本來控制鏈接過程鏈接器使用一個(gè)命令語言腳本來控制鏈接過程。3.4 編譯器編譯器GCC的使用的使用3.4.1 GCC編譯器介紹編譯器介紹GCC是是GNU項(xiàng)目的編譯器組件之一,也是項(xiàng)目的編譯器組件之一,也
14、是GNU軟件產(chǎn)品家族具有代表軟件產(chǎn)品家族具有代表性的作品。性的作品。GCC的發(fā)展大體經(jīng)歷了下面的幾個(gè)階段。的發(fā)展大體經(jīng)歷了下面的幾個(gè)階段。 1987年,第一版的年,第一版的GCC發(fā)布。發(fā)布。 2019.6.18,GCC3.0正式發(fā)布。正式發(fā)布。 2019.4.20,GCC 3.4.0版本發(fā)布。版本發(fā)布。 2019.4.22,最新版本的,最新版本的GCC 4.0發(fā)布,官方網(wǎng)站:發(fā)布,官方網(wǎng)站:。GCC是一組編譯工具的總稱,其軟件包里包含眾多的工具,按其類型,是一組編譯工具的總稱,其軟件包里包含眾多的工具,按其類型,主要有以下的分類。主要有以下的分類。 C編譯器編譯器 cc,
15、 cc1, cc1plus, gcc C+編譯器編譯器 c+, cc1plus, g+ 源碼預(yù)處理程序源碼預(yù)處理程序 cpp, cpp0 庫(kù)文件庫(kù)文件 libgcc.a, libgcc_eh.a, libgcc_s.so, libiberty.a, libstdc+.a,so, libsupc+.a3.4.2 GCC編譯選項(xiàng)解析編譯選項(xiàng)解析GCC是Linux下基于命令行的c語言編譯器,其基本的使用語法如下。gcc option | filename 對(duì)于編譯C+的源程序,其基本的語法如下。g+ option | filename GCC擁有眾多的命令選項(xiàng),有超過100個(gè)的編譯選項(xiàng)可用,按其應(yīng)用
16、有如下的分類。1常用編譯選項(xiàng)常用編譯選項(xiàng)2出錯(cuò)檢查和警告提示選項(xiàng)出錯(cuò)檢查和警告提示選項(xiàng)3代碼優(yōu)化選項(xiàng)代碼優(yōu)化選項(xiàng)4調(diào)試分析選項(xiàng)調(diào)試分析選項(xiàng)3.5 調(diào)試器調(diào)試器GDB的使用技巧的使用技巧3.5.1 GDB調(diào)試器介紹調(diào)試器介紹以下是以下是GDB所提供的一些功能。所提供的一些功能。 啟動(dòng)程序,并且可以設(shè)置運(yùn)行環(huán)境和參數(shù)來運(yùn)行啟動(dòng)程序,并且可以設(shè)置運(yùn)行環(huán)境和參數(shù)來運(yùn)行指定程序。指定程序。 讓程序在指定斷點(diǎn)處停止執(zhí)行。讓程序在指定斷點(diǎn)處停止執(zhí)行。 對(duì)程序做出相應(yīng)的調(diào)整,這樣就能糾正一個(gè)錯(cuò)誤對(duì)程序做出相應(yīng)的調(diào)整,這樣就能糾正一個(gè)錯(cuò)誤后繼續(xù)調(diào)試。后繼續(xù)調(diào)試。使用使用gdb命令的語法如下。命令的語法如下。#
17、gdb 參數(shù)參數(shù) Filename3.5.2 GDB調(diào)試命令調(diào)試命令常用到的GDB調(diào)試命令。命 令說 明file指定要調(diào)試的可執(zhí)行程序kill終止正在調(diào)試的可執(zhí)行程序next執(zhí)行一行源代碼但并不進(jìn)入函數(shù)內(nèi)部list部分列出源代碼step執(zhí)行一行源代碼并不進(jìn)入函數(shù)內(nèi)部run執(zhí)行當(dāng)前的可執(zhí)行程序quit結(jié)束gdb調(diào)試任務(wù)watch可以檢查一個(gè)變量的值而不管它何時(shí)被改變print打印表達(dá)式的值到標(biāo)準(zhǔn)輸出break N在指定的第N行源代碼設(shè)置斷點(diǎn)info break顯示當(dāng)前斷點(diǎn)清單,包括到達(dá)斷點(diǎn)處的次數(shù)等info files顯示被調(diào)試文件的詳細(xì)信息info func顯示所有的函數(shù)名info local
18、 顯示當(dāng)函數(shù)中的局部變量信息info prog顯示被調(diào)試程序的執(zhí)行狀態(tài)info var顯示所有的全局和靜態(tài)變量名稱make在不退出 gdb 的情況下運(yùn)行 make 工具shell在不退出 gdb 的情況下運(yùn)行shell命令continue繼續(xù)執(zhí)行正在調(diào)試的程序3.6 Linux編程庫(kù)編程庫(kù)3.6.1 Linux編程庫(kù)介紹編程庫(kù)介紹Linux下的庫(kù)文件分為共享庫(kù)和靜態(tài)庫(kù)下的庫(kù)文件分為共享庫(kù)和靜態(tài)庫(kù)2大類,它大類,它們兩者的差別僅在程序執(zhí)行時(shí)所需的代碼是在運(yùn)們兩者的差別僅在程序執(zhí)行時(shí)所需的代碼是在運(yùn)行時(shí)動(dòng)態(tài)加載的,還是在編譯時(shí)靜態(tài)加載的。此行時(shí)動(dòng)態(tài)加載的,還是在編譯時(shí)靜態(tài)加載的。此外,通常共享庫(kù)以外,通常共享庫(kù)以.so(Shared Object)結(jié)尾,靜態(tài)結(jié)尾,靜態(tài)鏈接庫(kù)通常以鏈接庫(kù)通常以.a結(jié)尾結(jié)尾Archive)。在終端下查看)。在終端下查看庫(kù)的內(nèi)容,通常共享庫(kù)為綠色,而靜態(tài)庫(kù)為黑色庫(kù)的內(nèi)容,通常共享庫(kù)為綠色,而靜態(tài)庫(kù)為黑色。Linux的庫(kù)一般在的庫(kù)一般在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中標(biāo)公司股權(quán)轉(zhuǎn)讓合同范例
- 租賃婚紗場(chǎng)地合同范例
- 二年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)集錦
- 2024至2030年高效流化床干燥機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 市場(chǎng) 推廣 海外合同范例
- 聘用文物顧問合同范例
- 散裝水泥購(gòu)買合同范例
- 陜西青年職業(yè)學(xué)院《短距離無線通信技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年不銹鋼纖維針織布項(xiàng)目投資價(jià)值分析報(bào)告
- 大型花藝合同范例
- 話題作文語言創(chuàng)新課件
- 墓碑供貨方案及服務(wù)保障措施
- M站操作管理制度
- ACLS-PC-SA課前自我測(cè)試試題及答案
- 統(tǒng)編教材小學(xué)語文課外閱讀《一百條裙子》導(dǎo)讀課課件
- 2019譯林版高中英語必修二單詞默寫表
- 二次結(jié)構(gòu)施工質(zhì)量通病防治措施
- 2022雙減背景下小學(xué)數(shù)學(xué)分層作業(yè)優(yōu)化設(shè)計(jì)研究課題結(jié)題報(bào)告
- PDCA循環(huán)PPT課件 精品
- (民法典版)離婚登記申請(qǐng)受理回執(zhí)單
- 地下水環(huán)境監(jiān)測(cè)井施工設(shè)計(jì)方案(共10頁)
評(píng)論
0/150
提交評(píng)論