亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C > 正文

深入分析了Linux如何編程C語(yǔ)言

2020-02-24 14:35:21
字體:
供稿:網(wǎng)友

深入分析了Linux如何編程C語(yǔ)言,在Linux下面,如果要編譯一個(gè)C語(yǔ)言源程序,我們要使用GNU的gcc編譯器,下面我們以一個(gè)實(shí)例來說明如何使用gcc編譯器。

1.源程序的編譯
假設(shè)我們有下面一個(gè)非常簡(jiǎn)單的源程序(hello.c):
?int main(int argc,char **argv)
? {
printf("Hello Linux/n");
? }

要編譯這個(gè)程序,我們只要在命令行下執(zhí)行:
gcc -o hello hello.c
gcc 編譯器就會(huì)為我們生成一個(gè)hello的可執(zhí)行文件.執(zhí)行./hello就可以看到程序的輸出結(jié)果了.命令行中 gcc表示我們是用gcc來編譯我們的源程序,-o 選項(xiàng)表示我們要求編譯器給我們輸出的可執(zhí)行文件名為hello 而hello.c是我們的源程序文件.

gcc編譯器有許多選項(xiàng),一般來說我們只要知道其中的幾個(gè)就夠了. -o選項(xiàng)我們已經(jīng)知道了,表示我們要求輸出的可執(zhí)行文件名. -c選項(xiàng)表示我們只要求編譯器輸出目標(biāo)代碼,而不必要輸出可執(zhí)行文件. -g選項(xiàng)表示我們要求編譯器在編譯的時(shí)候提供我們以后對(duì)程序進(jìn)行調(diào)試的信息.

知道了這三個(gè)選項(xiàng),我們就可以編譯我們自己所寫的簡(jiǎn)單的源程序了,如果你想要知道更多的選項(xiàng),可以查看gcc的幫助文檔,那里有著許多對(duì)其它選項(xiàng)的詳細(xì)說明.

2.Makefile的編寫
??? 假設(shè)我們有下面這樣的一個(gè)程序,源代碼如下:

/*? main.c */
?#include "mytool1.h"
?#include "mytool2.h"

?int main(int argc,char **argv)
?{
? mytool1_print("hello");
? mytool2_print("hello");
?}

/*? mytool1.h? */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H

?void mytool1_print(char *print_str);

#endif

/*? mytool1.c? */
?#include "mytool1.h"
?void mytool1_print(char *print_str)
?{
?? printf("This is mytool1 print %s/n",print_str);
?}

/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H

?void mytool2_print(char *print_str);

#endif

/*? mytool2.c? */
?#include "mytool2.h"
?void mytool2_print(char *print_str)
?{
?? printf("This is mytool2 print %s/n",print_str);
?}


當(dāng)然由于這個(gè)程序是很短的我們可以這樣來編譯
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
這樣的話我們也可以產(chǎn)生main程序,而且也不時(shí)很麻煩.但是如果我們考慮一下如果有一天我們修改了其中的一個(gè)文件(比如說mytool1.c)那么我們難道還要重新輸入上面的命令?也許你會(huì)說,這個(gè)很容易解決啊,我寫一個(gè)SHELL腳本,讓她幫我去完成不就可以了.是的對(duì)于這個(gè)程序來說,是可以起到作用的.但是當(dāng)我們把事情想的更復(fù)雜一點(diǎn),如果我們的程序有幾百個(gè)源程序的時(shí)候,難道也要編譯器重新一個(gè)一個(gè)的去編譯?

為此,聰明的程序員們想出了一個(gè)很好的工具來做這件事情,這就是make.我們只要執(zhí)行以下make,就可以把上面的問題解決掉.在我們執(zhí)行make之前,我們要先編寫一個(gè)非常重要的文件.--Makefile.對(duì)于上面的那個(gè)程序來說,可能的一個(gè)Makefile的文件是:
#?? 這是上面那個(gè)程序的Makefile文件
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c

有了這個(gè)Makefile文件,不過我們什么時(shí)候修改了源程序當(dāng)中的什么文件,我們只要執(zhí)行make命令,我們的編譯器都只會(huì)去編譯和我們修改的文件有關(guān)的文件,其它的文件她連理都不想去理的.
下面我們學(xué)習(xí)Makefile是如何編寫的.

在Makefile中也#開始的行都是注釋行.Makefile中最重要的是描述文件的依賴關(guān)系的說明.一般的格式是:
target: components
TAB rule

第一行表示的是依賴關(guān)系.第二行是規(guī)則.
比如說我們上面的那個(gè)Makefile文件的第二行
main:main.o mytool1.o mytool2.o
表示我們的目標(biāo)(target)main的依賴對(duì)象(components)是main.o mytool1.o mytool2.o 當(dāng)倚賴的對(duì)象在目標(biāo)修改后修改的話,就要去執(zhí)行規(guī)則一行所指定的命令.就象我們的上面那個(gè)Makefile第三行所說的一樣要執(zhí)行 gcc -o main main.o mytool1.o mytool2.o 注意規(guī)則一行中的TAB表示那里是一個(gè)TAB鍵
Makefile有三個(gè)非常有用的變量.分別是$@,$^,$$@--目標(biāo)文件,$^--所有的依賴文件,$如果我們使用上面三個(gè)變量,那么我們可以簡(jiǎn)化我們的Makefile文件為:
# 這是簡(jiǎn)化后的Makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $mytool1.o:mytool1.c mytool1.h
gcc -c $mytool2.o:mytool2.c mytool2.h
gcc -c $

經(jīng)過簡(jiǎn)化后我們的Makefile是簡(jiǎn)單了一點(diǎn),不過人們有時(shí)候還想簡(jiǎn)單一點(diǎn).這里我們學(xué)習(xí)一個(gè)Makefile的缺省規(guī)則
.c.o:
gcc -c $

這個(gè)規(guī)則表示所有的 .o文件都是依賴與相應(yīng)的.c文件的.例如mytool.o依賴于mytool.c這樣Makefile還可以變?yōu)?
# 這是再一次簡(jiǎn)化后的Makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
.c.o:
gcc -c $

好了,我們的Makefile 也差不多了,如果想知道更多的關(guān)于Makefile規(guī)則可以查看相應(yīng)的文檔.

3.程序庫(kù)的鏈接
??? 試著編譯下面這個(gè)程序

/* temp.c */
? #include

? int main(int argc,char **argv)
?? {
???????? double value;
?printf("Value:%f/n",value);
?? }

這個(gè)程序相當(dāng)簡(jiǎn)單,但是當(dāng)我們用 gcc -o temp temp.c 編譯時(shí)會(huì)出現(xiàn)下面所示的錯(cuò)誤.
/tmp/cc33Kydu.o: In function `main':
/tmp/cc33Kydu.o(.text+0xe): undefined reference to `log'
collect2: ld returned 1 exit status

出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)榫幾g器找不到log的具體實(shí)現(xiàn).雖然我們包括了正確的頭文件,但是我們?cè)诰幾g的時(shí)候還是要連接確定的庫(kù).在Linux下,為了使用數(shù)學(xué)函數(shù),我們必須和數(shù)學(xué)庫(kù)連接,為此我們要加入 -lm 選項(xiàng). gcc -o temp temp.c -lm這樣才能夠正確的編譯.也許有人要問,前面我們用printf函數(shù)的時(shí)候怎么沒有連接庫(kù)呢?是這樣的,對(duì)于一些常用的函數(shù)的實(shí)現(xiàn),gcc編譯器會(huì)自動(dòng)去連接一些常用庫(kù),這樣我們就沒有必要自己去指定了. 有時(shí)候我們?cè)诰幾g程序的時(shí)候還要指定庫(kù)的路徑,這個(gè)時(shí)候我們要用到編譯器的 -L選項(xiàng)指定路徑.比如說我們有一個(gè)庫(kù)在 /home/hoyt/mylib下,這樣我們編譯的時(shí)候還要加上 -L/home/hoyt/mylib.對(duì)于一些標(biāo)準(zhǔn)庫(kù)來說,我們沒有必要指出路徑.只要它們?cè)谄鹑笔?kù)的路徑下就可以了.系統(tǒng)的缺省庫(kù)的路徑/lib /usr/lib /usr/local/lib 在這三個(gè)路徑下面的庫(kù),我們可以不指定路徑.

還有一個(gè)問題,有時(shí)候我們使用了某個(gè)函數(shù),但是我們不知道庫(kù)的名字,這個(gè)時(shí)候怎么辦呢?很抱歉,對(duì)于這個(gè)問題我也不知道答案,我只有一個(gè)傻辦法.首先,我到標(biāo)準(zhǔn)庫(kù)路徑下面去找看看有沒有和我用的函數(shù)相關(guān)的庫(kù),我就這樣找到了線程(thread)函數(shù)的庫(kù)文件(libpthread.a). 當(dāng)然,如果找不到,只有一個(gè)笨方法.比如我要找sin這個(gè)函數(shù)所在的庫(kù). 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文件,到那里面去找了. 在sin文件當(dāng)中,我會(huì)找到這樣的一行l(wèi)ibm-2.1.2.so:00009fa0 W sin 這樣我就知道了sin在 libm-2.1.2.so庫(kù)里面,我用 -lm選項(xiàng)就可以了(去掉前面的lib和后面的版本標(biāo)志,就剩下m了所以是 -lm). 如果你知道怎么找,請(qǐng)趕快告訴我,我回非常感激的.謝謝!

4.程序的調(diào)試
??? 我們編寫的程序不太可能一次性就會(huì)成功的,在我們的程序當(dāng)中,會(huì)出現(xiàn)許許多多我們想不到的錯(cuò)誤,這個(gè)時(shí)候我們就要對(duì)我們的程序進(jìn)行調(diào)試了.

最常用的調(diào)試軟件是gdb.如果你想在圖形界面下調(diào)試程序,那么你現(xiàn)在可以選擇xxgdb.記得要在編譯的時(shí)候加入 -g選項(xiàng).關(guān)于gdb的使用可以看gdb的幫助文件.由于我沒有用過這個(gè)軟件,所以我也不能夠說出如何使用. 不過我不喜歡用gdb.跟蹤一個(gè)程序是很煩的事情,我一般用在程序當(dāng)中輸出中間變量的值來調(diào)試程序的.當(dāng)然你可以選擇自己的辦法,沒有必要去學(xué)別人的.現(xiàn)在有了許多IDE環(huán)境,里面已經(jīng)自己帶了調(diào)試器了.你可以選擇幾個(gè)試一試找出自己喜歡的一個(gè)用.

5.頭文件和系統(tǒng)求助
??? 有時(shí)候我們只知道一個(gè)函數(shù)的大概形式,不記得確切的表達(dá)式,或者是不記得著函數(shù)在那個(gè)頭文件進(jìn)行了說明.這個(gè)時(shí)候我們可以求助系統(tǒng).

比如說我們想知道fread這個(gè)函數(shù)的確切形式,我們只要執(zhí)行 man fread 系統(tǒng)就會(huì)輸出著函數(shù)的詳細(xì)解釋的.和這個(gè)函數(shù)所在的頭文件說明了. 如果我們要write這個(gè)函數(shù)的說明,當(dāng)我們執(zhí)行man write時(shí),輸出的結(jié)果卻不是我們所需要的. 因?yàn)槲覀円氖莣rite這個(gè)函數(shù)的說明,可是出來的卻是write這個(gè)命令的說明.為了得到write的函數(shù)說明我們要用 man 2 write. 2表示我們用的write這個(gè)函數(shù)是系統(tǒng)調(diào)用函數(shù),還有一個(gè)我們常用的是3表示函數(shù)是C的庫(kù)函數(shù).

記住不管什么時(shí)候,man都是我們的最好助手.

到這里,深入分析了Linux如何編程C語(yǔ)言的介紹就算完成了,如果有什么不清楚可以留言給我,如果覺得我寫得不錯(cuò)的話,請(qǐng)給我一個(gè)大拇指,謝謝!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

91一区二区三区四区| 人妻丰满熟妇av无码久久洗澡| 中文字幕一区二区三区域| 不卡区在线中文字幕| 欧美中文在线免费| 久久久久久久久久久久久久久久久久av| 最新二区三区av| 国产精品福利电影| 国产精品久久久久蜜臀| 视频一区视频二区视频三区高| 欧美乱大交xxxx| 欧美久久电影| 久久久久久欧美精品色一二三四| 欧美偷拍综合| 天码人妻一区二区三区在线看| 免费成人三级| 久久精品一区二区| 六月丁香婷婷色狠狠久久| 在线播放视频一区| 欧美激情一区二区三区在线视频| 亚洲乱熟女一区二区| 波多野结衣视频免费观看| 性生生活大片免费看视频| 91久久国产视频| 日韩精品久久久久久福利| www插插插无码免费视频网站| 美女免费免费看网站| 欧美日韩国产成人高清视频| 97av在线视频| 欧美黑人疯狂性受xxxxx野外| 国产精品一区二区不卡视频| 一区二区三区国产视频| 天海翼一区二区三区四区在线观看| 亚洲va欧美va国产综合剧情| 久久久国产精华液| 欧美日韩性生活| av动漫在线免费观看| 亚洲影视在线观看| 欧美日韩一区精品| 久久久久久综合网天天| 亚洲综合自拍网| 亚洲高清影院| 欧美黄色片免费观看| 欧美一区二区三区黄片| 国产人伦精品一区二区| 成人欧美一区二区三区在线播放| 日韩不卡免费视频| 成人激情春色网| 黑粗硬长欧美在线视频免费的| 国产在线精品国自产拍免费| 天堂成人娱乐在线视频免费播放网站| 一本一道久久a久久精品综合| 国产青青视频| 久久国产主播| 美女精品一区最新中文字幕一区二区三区| 成人国产精品免费观看动漫| 蜜臀久久精品久久久用户群体| 高清在线成人网| 99re6在线| 好男人社区在线视频| 牛牛精品在线| 一级在线免费观看| 久久人人爽人人爽人人片av不| 在线麻豆国产传媒1国产免费| 免费欧美激情| 中文字幕一区二区三区在线播放| 欧美激情aⅴ一区二区三区| 久久久综合九色合综国产精品| 日韩中文娱乐网| 91亚洲精品国偷拍自产在线观看| 日韩av一区在线观看| 中文字幕不卡在线视频极品| 亚洲福利精品在线| 日本精品久久久久影院| 少妇精品一区二区| 精品午夜电影| 久久久久国产一区| 黄色一级片黄色| 欧美性猛交xxxx免费看漫画| 亚洲欧美国产日韩综合| 美女久久久精品| av片在线免费观看| 97精品久久人人爽人人爽| 亚洲福利视频久久| 人体内射精一区二区三区| 日本精品久久久久| 成人免费视频视频| 亚洲一区二区观看| 国产精品被窝福利一区| 欧美成人免费在线观看| 午夜欧美大尺度福利影院在线看| 久久夜色精品国产噜噜av小说| 亚欧洲精品视频| 26uuu另类亚洲欧美日本一| 成人蜜臀av电影| 日本熟伦人妇xxxx| 亚洲人成网77777色在线播放| 日韩在线激情视频| 亚洲人成网站在线| 欧美午夜精品理论片a级按摩| 在线中文字幕不卡| 欧美日韩国产综合视频| 成人性生交大片免费看在线播放| 91成人精品网站| 日韩精品资源二区在线| 午夜一级电影| 在线观看视频91| av黄色一级片| 欧美日本色图| 亚洲福中文字幕伊人影院| 97人洗澡人人免费公开视频碰碰碰| www.老鸭窝.com| 亚洲精品一区二区三区香蕉| 69影院欧美专区视频| 精品1区2区3区| 丁香婷婷久久| 黄网站在线观看永久免费| 香蕉网站在线| 国产又大又粗又硬| 91性高潮久久久久久久| 在线三级电影| 91日韩视频在线观看| 极品美妇后花庭翘臀娇吟小说| 久久永久免费视频| 亚洲欧洲一区二区三区久久| 欧美午夜精品久久久久久人妖| 欧美日韩国产首页在线观看| 国产精品51麻豆cm传媒| wwwwww.欧美系列| 欧美激情一区二区三区在线| 免费观看日韩毛片| 日本三级免费观看| 亚洲精品国产动漫| 99国产欧美久久久精品| 国产成人精品av在线| 欧美视频精品全部免费观看| 成人免费观看49www在线观看| 性感美女视频一二三| 欧美日韩免费看片| 久久精品72免费观看| 国产精品传媒在线| 99久久夜色精品国产亚洲狼| 91色琪琪电影亚洲精品久久| 国产成人久久精品77777综合| 亚洲一二三四2021不卡| 99精品人妻无码专区在线视频区| 国产中文字幕在线看| 濑亚美莉vs黑人在线观看| 色婷婷综合久久久| 免费在线中文字幕| 两性午夜免费视频| 一级网站免费观看| 一区二区三区视频观看| 不卡的av影片| 奇米777欧美一区二区| 波多野结衣av在线免费观看| 色一情一乱一伦一区二区三欧美| 91tv亚洲精品香蕉国产一区7ujn| 久久人人爽爽爽人久久久| 无码人妻一区二区三区免费n鬼沢| av色综合久久天堂av色综合在| 波多野结衣国产精品| 欧美亚日韩国产aⅴ精品中极品| 伊人精品综合| 人禽交欧美网站免费| 国产乱码精品一品二品| 国产熟女精品视频| 亚洲综合清纯丝袜自拍| 婷婷激情在线| 国产精品麻豆成人av电影艾秋| 国模 一区 二区 三区| 国产又粗又硬又长| 337p日本| 人妻与黑人一区二区三区| 国产精品毛片高清在线完整版| 久草热在线观看| 久久精品99国产| 亚洲成a人v欧美综合天堂下载| 亚洲欧美日韩一区成人| 亚洲成人在线观看视频| 美国毛片一区二区| 头脑特工队2免费完整版在线观看| 国精产品一区二区三区有限公司| 久久亚洲国产精品成人av秋霞| 亚洲**毛片| 亚洲一区不卡在线| 日韩av.com| 欧美日韩在线观看一区二区三区| 精品国产百合女同互慰| 欧美人成在线| 成人动漫精品一区二区| 一区二区三区中文| av在线一区二区| 开心久久婷婷综合中文字幕| 国产尤物在线播放| 欧美激情 亚洲a∨综合| 亚洲热av色在线播放| 欧美日韩免费看| 午夜电影久久久| 亚洲精品成人一区| 日韩中文字幕影院| 午夜国产福利一区二区| 欧美男男gaytwinkfreevideos| 91成人在线观看国产| 久久99久久99小草精品免视看| 亚洲日本精品视频| 男人添女人荫蒂免费视频| 国产亚洲美女久久| 国产精品www爽爽爽| 四虎成人精品永久免费av九九| 久久久精品一品道一区| 中文字幕久久久久| 黄色不卡一区| 午夜精品久久久久久久99水蜜桃| 国产精品免费大片| 日本熟妇人妻xxxx| 美女免费久久| 国内自拍视频在线播放| 国产精品高潮呻吟视频| 男人天堂网av| 在线亚洲激情| 国产精品99久久久精品无码| 久久久久久91精品色婷婷| 亚洲AV无码国产精品| 激情aⅴ欧美一区二区欲海潮| 98色花堂精品视频在线观看| 99re6热在线精品视频| 黄瓜视频污在线观看| 亚洲妇女av| 日韩不卡一二三区| 精品人妻一区二区三区四区| 伊人久久在线观看| 精品免费二区三区三区高中清不卡| 人妻精品久久久久中文字幕69| 日日日日人人人夜夜夜2017| 精品国内亚洲在观看18黄| 亚洲成人黄色影院| 成人午夜又粗又硬又大| 国产精品18久久久久久久久久久久| 国产亚洲一区二区三区在线观看| jizz大全欧美jizzcom| 人妻精油按摩bd高清中文字幕| 中文乱码字幕高清在线观看| 亚洲成人免费在线视频| 亚洲v日本v欧美v久久精品| 自拍av在线| 欧美亚一区二区| 国产亚洲天堂网| 奇米精品一区二区三区| 亚洲成人第一网站| 国产成人综合亚洲91猫咪| 亚洲成人午夜在线| 国产亚洲欧美中文| 日韩人妻无码一区二区三区99| 久久色视频免费观看| 偷拍精品福利视频导航| 国产伦精品一区二区三区四区视频_| 国产午夜亚洲精品羞羞网站| 国产不卡一区视频| 久久精品一区二区三区不卡| a优女a优女片| 欧美日韩dvd| 91美女在线| 蜜臀久久99精品久久久画质超高清| 国偷自产av一区二区三区小尤奈| 日本乱人伦一区| 亚洲精品视频在线观看视频| av在线网站免费观看| 先锋av资源站| 亚洲综合成人婷婷小说| 精品网站aaa| 粉嫩91精品久久久久久久99蜜桃| 日本一区二区三区免费看| 北岛玲一区二区三区四区| 欧美理论电影在线精品| 欧美日韩中文字幕在线观看| а√在线天堂官网| 欧美在线制服丝袜| 成人在线观看免费网站| 日韩精品专区在线影院重磅| 亚洲精品人成网在线播放影院| 污污网站在线观看视频| 影音先锋国产资源| 性做久久久久久免费观看欧美| 亚洲五月天综合| 超碰人人草人人| 无码人妻aⅴ一区二区三区日本| 日韩伦理一区二区三区av在线| 欧美午夜一区二区福利视频| 热久久久久久| 亚洲精品福利| 国产99久久精品一区二区 夜夜躁日日躁| 久久久久久久一区二区三区| 999色成人| 国产精品99精品无码视| 久久精品第九区免费观看| 2024最新电影免费在线观看| 狠狠干 狠狠操| 欧美国产一二三区| 青青视频一区二区| 亚洲白拍色综合图区| 欧美三级日韩三级| 亚洲久本草在线中文字幕| 欧洲黄色一级视频| 国产成人精品www牛牛影视| 极品美女一区| 91视频久久| 成人日韩视频| 亚洲精品国精品久久99热| 超碰在线首页| 韩日视频在线观看| sis001亚洲原创区| 九色丨蝌蚪丨成人| 久久这里有精品视频| 超碰在线公开免费| 午夜久久久久久久| 国产女主播喷水视频在线观看| 福利社在线免费视频| 日韩一区二区精品在线观看| 中文字幕系列一区| 超黄网站在线观看| 国产精品一区二区久久精品爱涩| 日本韩国欧美精品大片卡二| 99在线视频精品| 一区二区三区国产豹纹内裤在线| 欧美精品日韩www.p站| 国产一区免费视频| 国产精品一区免费观看|