成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當(dāng)前位置:首頁Linux系統(tǒng)上多文件C程序的編譯與調(diào)試

Linux系統(tǒng)上多文件C程序的編譯與調(diào)試

來源:九壹網(wǎng)

一、先建立一個(gè)頭文件add.h

通過vi創(chuàng)建一個(gè)add.h,并進(jìn)行編寫該文件,用來存放求和函數(shù)add()的聲明:

二、建立一個(gè)add.c文件

通過vi創(chuàng)建一個(gè)add.c文件,并進(jìn)行編寫,用來存放求和函數(shù)add()的實(shí)現(xiàn):

三、建立一個(gè)max.h頭文件

通過vi創(chuàng)建一個(gè)max.h,并進(jìn)行編寫該文件,用來存放求最大值函數(shù)max()的聲明:

四、建立一個(gè)max.c文件

通過vi創(chuàng)建一個(gè)max.c,并進(jìn)行編寫該文件,用來存放求最大值函數(shù)max()的實(shí)現(xiàn):

五、建立主函數(shù)main.c

通過vi創(chuàng)建一個(gè)main.c,并進(jìn)行編寫該文件,用來實(shí)現(xiàn)求和函數(shù)add()和求最大值函數(shù)max()這兩個(gè)函數(shù)的功能:

六、編譯

(1)一步編譯

通過gcc -o main main.c add.c max.c進(jìn)行編譯,生成可執(zhí)行文件main:

(2)兩步編譯

①先把.c文件轉(zhuǎn)換為二進(jìn)制指令.o文件

把a(bǔ)dd.c文件轉(zhuǎn)換為二進(jìn)制指令add.o文件;把max.c文件轉(zhuǎn)換為二進(jìn)制指令max.o文件;把main.c文件轉(zhuǎn)換為二進(jìn)制指令main.o文件:

②進(jìn)行鏈接,生成可執(zhí)行程序main

七、makefile和make

makefile文件中的內(nèi)容描述了如何編譯整個(gè)工程。makefile文件的作用是管理整個(gè)工程。 真正的makefile文件是通過工具生成的。makefile文件里面不用寫頭文件。為每個(gè)工程配上makefile文件,在編譯時(shí)只需make指令就可以完成編譯工作。

make指令會(huì)讀取makefile文件中的內(nèi)容,按照makefile文件編譯代碼。

(1)makefile文件的編寫

通過vi makefile創(chuàng)建一個(gè)makefile文件:


在vi中編寫makefile文件:

假設(shè)現(xiàn)在要生成最終的可執(zhí)行文件main:

第一步:指定最終生成的可執(zhí)行程序main

格式:

all:main

第二步:寫可執(zhí)行程序main的依賴文件和依賴文件的編譯規(guī)則

格式:

main:main.o add.o max.o
	gcc -o main.o add.o max.o

編譯main.o add.o max.o這三個(gè)文件時(shí),gcc前面必須要輸入tab鍵(縮進(jìn))。

第三步:寫可執(zhí)行文件main的main.o、add.o、max.o文件的依賴文件和依賴文件的編譯規(guī)則

格式:

main.o:main.c
	gcc -c main.c
add.o:add.c
	gcc -c add.c
max.o:max.c
	gcc -c max.c

以上步三步總結(jié)起來就是all去指定最終生成的可執(zhí)行程序?yàn)閙ain程序,然后我們的程序就會(huì)去找main程序和它的依賴文件main.o、add.o、max.o,然后通過編譯規(guī)則gcc -o main.o add.o max.o生成可執(zhí)行程序main。如果沒有找到main程序的依賴文件main.o、add.o、max.o,接著就會(huì)分別去找main.o、add.o、max.o的依賴文件main.c、add.c、max.c,找到之后通過編譯規(guī)則gcc -c main.c、gcc -c add.c、gcc -c max.c將main.c、add.c、max.c文件分別轉(zhuǎn)換成main.o、add.o、max.o文件,然后通過編譯規(guī)則gcc -o main.o add.o max.o生成可執(zhí)行程序main。

第四步:清理工程,把整個(gè)過程中不是自己寫的代碼,也就是中間生成的一些文件刪掉。

格式:

clean: 
	rm -rf *.o main

具體如下圖所示:

保存退出之后就可以使用make指令編譯代碼。

makefile文件中還可以寫入安裝指令install,但是安裝指令需要在管理員模式下用make指令來實(shí)現(xiàn)。

(2)make指令編譯代碼并在編譯完成后執(zhí)行程序main

在make指令執(zhí)行完之后可以通過make clean執(zhí)行對(duì)應(yīng)的規(guī)則,去刪除.o文件和main程序:


①此時(shí)再去執(zhí)行兩次make指令:

出現(xiàn)這樣的結(jié)果是因?yàn)槲覀儾]有修改代碼,所以不需要去編譯,整個(gè)代碼是最新的。

②如果修改add.c中的代碼,在代碼中加一個(gè)空格(在分號(hào)前面加一個(gè)空格)并保存,并沒有改變代碼的邏輯:

此時(shí),通過make指令編譯代碼:


可以發(fā)現(xiàn)將add.c重新編譯了,然后進(jìn)行重新連接生成最終的main程序。

八、運(yùn)行

通過路徑運(yùn)行可執(zhí)行文件:

九、調(diào)試

在生成可執(zhí)行程序后才能進(jìn)行調(diào)試程序,調(diào)試程序主要是解決邏輯上的錯(cuò)誤和軟件上的權(quán)限。也就是編譯成功才能進(jìn)行調(diào)試,如果編譯不成功就是存在語法問題。編譯成功后運(yùn)行的結(jié)果和我們期望的結(jié)果不一樣的時(shí)候進(jìn)行調(diào)試程序。

調(diào)試的對(duì)象:運(yùn)行著的程序(進(jìn)程)。不是調(diào)試main.c也不是調(diào)試main,而是調(diào)試正在運(yùn)行著的main。

跟蹤程序:gdb是跟蹤程序的一個(gè)工具,只能跟蹤含有調(diào)試信息的程序,也就是說只能跟蹤debug版本不能跟蹤release版本

1.Debug 版本和 Release 版本

(1)Debug 版本

Debug 版本為可調(diào)式版本,生成的可執(zhí)行文件中包含調(diào)試需要的信息。我們作為開發(fā)人員,最常用的就是debug版本的可執(zhí)行文件。

(2)Release 版本

Release 版本為發(fā)行版本,是提供給用戶使用的版本。用gcc默認(rèn)生成的就是Release版本,不包含調(diào)試信息。

首先將源代碼編譯、鏈接生成Debug版本的可執(zhí)行文件,然后通過‘gdb Debug版本的可執(zhí)行文件名’進(jìn)入調(diào)試模式。

(3)Release 版本中生成調(diào)試信息

因?yàn)檎{(diào)試信息是在編譯過程時(shí)加入到中間文件(.o)中的,所以必須在編譯時(shí)控制其生成包含調(diào)試信息的中間文件。

生成調(diào)試調(diào)試信息:gcc -c main.c -g

可以看出在沒有生成調(diào)試信息是可執(zhí)行程序main的大小為16816,生成調(diào)試信息之后main的大小為19944,說明此時(shí)為調(diào)試版本。

生成包含調(diào)試信息的中間文件 :gcc -o hello hello.o 或者 gcc -o hello hello.c -g

(4)把調(diào)試版本容納到makefile文件中

第8行gcc -o main main.o add.o max.o是一個(gè)鏈接過程,并不是編譯過程,而調(diào)試信息是在編譯過程生成的,所以gcc -o main main.o add.o max.o后面不能用寫$(GDB)。

此時(shí),用make指令進(jìn)行編譯就是調(diào)試版本:


如果下次想用Release 版本,那就把makefile文件中的GDB=-g改為GDB= ,這時(shí)就從調(diào)試版本轉(zhuǎn)換到了Release 版本。

因篇幅問題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2

違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)