




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)二 嵌入式Linux開(kāi)發(fā)基礎(chǔ)一、實(shí)驗(yàn)?zāi)康?、進(jìn)一步熟悉Vi編輯器的使用2、掌握gcc編譯器的基本使用方法3、了解Makefile文件的內(nèi)容及編寫(xiě)格式,掌握Makefile文件的自動(dòng)生成方法 4、了解利用gdb調(diào)試程序的基本方法。二、實(shí)驗(yàn)設(shè)備裝有RedHat EnterpriseLinux操作系統(tǒng)的PC機(jī)三、預(yù)備知識(shí)掌握l(shuí)inux的基本命令,掌握C語(yǔ)言的基本編程方法了解Makefile文件的基本知識(shí)四、實(shí)驗(yàn)內(nèi)容及步驟1.熟悉VI編輯器的使用使用VI編輯器編輯下列幾個(gè)函數(shù)文件:hello.hstarfun.hhello.cstar.c在使用Vi編輯器的過(guò)程中,注意使用Vi的單行和多行復(fù)制命令,
2、練習(xí)字符串查找替換命令,刪除一個(gè)字符,刪除光標(biāo)后整個(gè)內(nèi)容命令,刪除一行命令,恢復(fù)刪除,保存和退出命令等命令,并嘗試使用其他命令。相關(guān)函數(shù)文件如下:Starfun.h 文件內(nèi)容如下:/*starfun.h*/#ifndef STARFUN_H#define STARFUN_H#define NUM 4#define NUMBER 3int star1() int i,j,k;for(k=1;k=NUM;+k) for(i=1;i=(NUM-k);+i)printf( );for(j=1;j=0;-k) for(i=1;i=(NUMBER-k+1);+i) printf( );for(j=1;j=
3、(2*k-1);+j)printf(*);printf(n);return 0;#endifhello.h文件內(nèi)容如下:/*hello.h*/#ifndef HELLO_H#define HELLO_Hvoid hello() star1();printf(hello,my friendsn); #endifhello.c 文件內(nèi)容如下:void showhello() hello();star.c文件內(nèi)容如下:#include starfun.h#include hello.h#include int main() star1();star2();showhello();return 0;2
4、使用gcc編譯器編譯程序第一種方法:分步進(jìn)行1)由star.c starfun.h 文件生成star.o 目標(biāo)文件gcc -c star.c -o star.o2)由hello.c hello.h starfun.h生成hello.o目標(biāo)文件gcc -c hello.c -o hello.o3)由hello.o star.o 生成應(yīng)用程序myproggcc star.o hello.o -o myprogrootlocalhost 01_hello# ./myprog * * * * * * * * *hello,my friends第二種方法:一條命令完成以上操作gcc star.c hel
5、lo.c -o myprog練習(xí)gcc中各種參數(shù)的使用,體會(huì)gcc編譯器編譯的過(guò)程及各選項(xiàng)參數(shù)的作用。rootlocalhost 01_hello# gcc star.c hello.c -o myprogrootlocalhost 01_hello# gcc -w star.c hello.c -o myprogrootlocalhost 01_hello# gcc -Wall star.c hello.c -o myprogIn file included from star.c:1:starfun.h: In function star1:starfun.h:13: warning: i
6、mplicit declaration of function printfstar.c: In function main:star.c:8: warning: implicit declaration of function showhellohello.c: In function showhello:hello.c:4: warning: implicit declaration of function hello體會(huì)-Wall -w選項(xiàng)的作用查閱當(dāng)前的gcc版本命令rootlocalhost 01_hello# gcc -vReading specs from /usr/lib/gc
7、c-lib/i386-redhat-linux/3.2.2/specsConfigured with: ./configure -prefix=/usr -mandir=/usr/share/man -infodir=/usr/share/info -enable-shared -enable-threads=posix -disable-checking -with-system-zlib -enable-_cxa_atexit -host=i386-redhat-linuxThread model: posixgcc version 3.2.2 20030222 (Red Hat Linu
8、x 3.2.2-5)3、Makefile文件的編寫(xiě)Makefile是用于自動(dòng)編譯和鏈接的,一個(gè)工程有很多文件組成,每一個(gè)文件的改變都會(huì)導(dǎo)致工程的重新鏈接,但是不是所有的文件都需要重新編譯,Makefile中紀(jì)錄有文件的信息,在make時(shí)會(huì)決定在鏈接的時(shí)候需要重新編譯哪些文件。Makefile的宗旨就是:讓編譯器知道要編譯一個(gè)文件需要依賴其他的哪些文件。當(dāng)那些依賴文件有了改變,編譯器會(huì)自動(dòng)的發(fā)現(xiàn)最終的生成文件已經(jīng)過(guò)時(shí),而重新編譯相應(yīng)的模塊。 請(qǐng)為上述程序手動(dòng)編寫(xiě)一個(gè)Makefile文件。Makefile的基本結(jié)構(gòu)不是很復(fù)雜,但當(dāng)一個(gè)程序開(kāi)發(fā)人員開(kāi)始寫(xiě)Makefile時(shí),經(jīng)常會(huì)懷疑自己寫(xiě)的是否符合
9、慣例,而且自己寫(xiě)的Makefile經(jīng)常和自己的開(kāi)發(fā)環(huán)境相關(guān)聯(lián),當(dāng)系統(tǒng)環(huán)境變量或路徑發(fā)生了變化后,Makefile可能還要跟著修改。這樣就造成了手工書(shū)寫(xiě)Makefile的諸多問(wèn)題,automake恰好能很好地幫助我們解決這些問(wèn)題。使用automake,程序開(kāi)發(fā)人員只需要寫(xiě)一些簡(jiǎn)單的含有預(yù)定義宏的文件,由autoconf根據(jù)一個(gè)宏文件生成configure,由automake根據(jù)另一個(gè)宏文件生成Makefile.in,再使用configure依據(jù)Makefile.in來(lái)生成一個(gè)符合慣例的Makefile。1)、建目錄在你的工作目錄下建一個(gè)helloworld目錄,用來(lái)存放helloworld程序及
10、相關(guān)文件,如在/home/my/build下:$ mkdir helloword$ cd helloworld2)、建立 helloworld.c文件用Vi編輯器寫(xiě)一個(gè)hellowrold.c文件,內(nèi)容如下:int main(int argc, char* argv)printf(Hello, Linux World!n);return 0;完成后保存退出。3)、生成configure使用autoscan命令來(lái)根據(jù)目錄下的源代碼生成一個(gè)configure.in的模板文件。命令:$ autoscan$ lsconfigure.scan helloworld.c執(zhí)行后在hellowrold目錄下會(huì)
11、生成一個(gè)文件:configure.scan,可以拿它作為configure.in的藍(lán)本。現(xiàn)在將configure.scan改名為configure.in,并且編輯它,按下面的內(nèi)容修改,去掉無(wú)關(guān)的語(yǔ)句:=configure.in內(nèi)容開(kāi)始=# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ(2.57)AC_INIT(hello,1.0)AM_INIT_AUTOMAKE(helloworld, 1.0)AC_CONFIG_SRCDIR(hello.c)AC_CONFIG
12、_HEADER(config.h)# Checks for programs.AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT(Makefile)=configure.in內(nèi)容結(jié)束=然后執(zhí)行命令aclocal和autoconf,分別會(huì)產(chǎn)生aclocal.m4及configure兩個(gè)文件:$ aclocal $ls acl
13、ocal.m4 configure.in helloworld.c $ autoconf $ ls aclocal.m4 autom4te.cache configure configure.in helloworld.cconfigure.in的內(nèi)容是一些宏定義,這些宏經(jīng)autoconf處理后會(huì)變成檢查系統(tǒng)特性、環(huán)境變量、軟件必須的參數(shù)的shell腳本。autoconf 是用來(lái)生成自動(dòng)配置軟件源代碼腳本(configure)的工具。configure腳本能獨(dú)立于autoconf運(yùn)行,且在運(yùn)行的過(guò)程中,不需要用戶的干預(yù)。要生成configure文件,必須告訴autoconf如何找到所用的宏。方
14、式是使用aclocal程序來(lái)生成aclocal.m4。aclocal根據(jù)configure.in文件的內(nèi)容,自動(dòng)生成aclocal.m4文件。aclocal是一個(gè)perl 腳本程序,它的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”。autoconf從configure.in這個(gè)列舉編譯軟件時(shí)所需要各種參數(shù)的模板文件中創(chuàng)建configure。autoconf需要GNU m4宏處理器來(lái)處理aclocal.m4,生成configure腳本。m4是一個(gè)宏處理器。將輸入拷貝到輸出,同時(shí)將宏展開(kāi)。宏可以是內(nèi)嵌的,也可以是用戶定義的。除
15、了可以展開(kāi)宏,m4還有一些內(nèi)建的函數(shù),用來(lái)引用文件,執(zhí)行命令,整數(shù)運(yùn)算,文本操作,循環(huán)等。m4既可以作為編譯器的前端,也可以單獨(dú)作為一個(gè)宏處理器4)、新建Makefile.am新建Makefile.am文件,命令:$ vi Makefile.am內(nèi)容如下:AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=helloworldhelloworld_SOURCES=helloworld.cautomake會(huì)根據(jù)Makefile.am來(lái)自動(dòng)生成Makefile.in。Makefile.am中定義的宏和目標(biāo),會(huì)指導(dǎo)automake生成指定的代碼。例如,宏bin_PROGRAMS
16、將導(dǎo)致編譯和連接的目標(biāo)被生成。5)、運(yùn)行automake命令:$ automake -add-missingconfigure.in: installing ./install-shconfigure.in: installing ./mkinstalldirsconfigure.in: installing ./missingMakefile.am: installing ./depcompautomake會(huì)根據(jù)Makefile.am文件產(chǎn)生一些文件,包含最重要的Makefile.in。6)、執(zhí)行configure生成Makefile$ ./configure checking for a
17、BSD-compatible install. /usr/bin/install -cchecking whether build environment is sane. yeschecking for gawk. gawkchecking whether make sets $(MAKE). yeschecking for gcc. gccchecking for C compiler default output. a.outchecking whether the C compiler works. yeschecking whether we are cross compiling.
18、 nochecking for suffix of executables. checking for suffix of object files. ochecking whether we are using the GNU C compiler. yeschecking whether gcc accepts -g. yeschecking for gcc option to accept ANSI C. none neededchecking for style of include used by make. GNUchecking dependency style of gcc.
19、gcc3configure: creating ./config.statusconfig.status: creating Makefileconfig.status: executing depfiles commands$ ls -l Makefile-rw-rw-r- 1 yutao yutao 15035 Oct 15 10:40 Makefile此時(shí)Makefile已經(jīng)產(chǎn)生出來(lái)了。7)、使用Makefile編譯代碼$ makeif gcc -DPACKAGE_NAME= -DPACKAGE_TARNAME= -DPACKAGE_VERSION= -DPACKAGE_STRING=
20、-DPACKAGE_BUGREPORT= -DPACKAGE=helloworld -DVERSION=1.0 -I. -I. -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo -c -o helloworld.o test -f helloworld.c | echo ./helloworld.c; then mv -f .deps/helloworld.Tpo .deps/helloworld.Po; else rm -f .deps/helloworld.Tpo; exit 1; figcc -g -O2 -o helloworld helloworld.o 運(yùn)行helloworld$ ./helloworld Hello, Linux World!這樣helloworld就編譯出來(lái)了,按上面的步驟會(huì)很容易地編譯出正確的helloworld文
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨領(lǐng)域合作在提升藥品安全水平中的價(jià)值
- 建設(shè)工程招標(biāo)代理機(jī)構(gòu)學(xué)習(xí)情境一建設(shè)工程承發(fā)包與招投標(biāo)認(rèn)知課件
- 漯河醫(yī)學(xué)高等專(zhuān)科學(xué)?!禡SOffice高級(jí)應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢城市學(xué)院《機(jī)器人系統(tǒng)開(kāi)發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省睢寧縣姚集中學(xué)2024-2025學(xué)年小學(xué)六年級(jí)數(shù)學(xué)畢業(yè)檢測(cè)指導(dǎo)卷含解析
- 閑置礦山出租合同范本
- 跨境電商平臺(tái)技術(shù)架構(gòu)與運(yùn)營(yíng)效率提升
- 河北省邢臺(tái)市巨鹿縣2025年數(shù)學(xué)三下期末達(dá)標(biāo)檢測(cè)試題含解析
- 高效英語(yǔ)學(xué)習(xí)法全面提升口語(yǔ)與聽(tīng)力水平
- 瀘州職業(yè)技術(shù)學(xué)院《社會(huì)統(tǒng)計(jì)學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 初中語(yǔ)文現(xiàn)代文閱讀訓(xùn)練及答案二十篇
- 2019安徽中考語(yǔ)文真題含答案
- 新生兒科出科考試試卷試題
- 信息化教學(xué)設(shè)計(jì)教案大學(xué)語(yǔ)文
- 氧氣、二氧化碳、氬氣安全周知卡
- 基層醫(yī)療衛(wèi)生機(jī)構(gòu)崗位設(shè)置指導(dǎo)意見(jiàn)
- FSC-COC培訓(xùn)學(xué)習(xí)
- 焊接線能量的計(jì)算公式
- 醫(yī)用氧儲(chǔ)罐檢查記錄表
- 植物的營(yíng)養(yǎng)器官:根、莖、葉匯總
評(píng)論
0/150
提交評(píng)論