在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下C編程基礎(chǔ)之:gcc編譯器

            Linux下C編程基礎(chǔ)之:gcc編譯器

            作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/257151.htm

            我們用unsgn_pow.c文件可以制作一個(gè)。下面分別講解怎么生成靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。

            n 靜態(tài)庫(kù)的創(chuàng)建和使用。

            創(chuàng)建靜態(tài)庫(kù)比較簡(jiǎn)單,使用歸檔工具ar將一些目標(biāo)文件集成在一起。

            [root@localhostlib]#gcc-cunsgn_pow.c

            [root@localhostlib]#arrcsvlibpow.aunsgn_pow.o

            a-unsgn_pow.o

            下面編譯主程序,它將會(huì)鏈接到剛生成的靜態(tài)庫(kù)libpow.a。具體運(yùn)行結(jié)果如下所示。

            [root@localhostlib]#gcc-opow_testpow_test.c-L.–lpow

            [root@localhostlib]#./pow_test210

            2^10=1024

            其中,選項(xiàng)“-Ldir”的功能與“-Idir”類(lèi)似,能夠在庫(kù)文件的搜索路徑列表中添加dir目錄,而“-lname”選項(xiàng)指示編譯時(shí)鏈接到庫(kù)文件libname.a或者libname.so。本實(shí)例中,程序pow_test.c需要使用當(dāng)前目錄下的一個(gè)靜態(tài)庫(kù)libpow.a。

            n 動(dòng)態(tài)庫(kù)的創(chuàng)建和使用。

            首先使用gcc的-fPIC選項(xiàng)為動(dòng)態(tài)庫(kù)構(gòu)造一個(gè)目標(biāo)文件

            [root@localhostlib]#gcc-fPIC-Wall-cunsgn_pow.c

            接下來(lái),使用-shared選項(xiàng)和已創(chuàng)建的位置無(wú)關(guān)目標(biāo)代碼,生成一個(gè)動(dòng)態(tài)庫(kù)libpow.so。

            [root@localhostlib]#gcc-shared-olibpow.sounsgn_pow.o

            下面編譯主程序,它將會(huì)鏈接到剛生成的動(dòng)態(tài)庫(kù)libpow.so。

            [root@localhostlib]#gcc-opow_testpow_test.c-L.–lpow

            在運(yùn)行可執(zhí)行程序之前,需要注冊(cè)動(dòng)態(tài)庫(kù)的路徑名。其方法有幾種:修改/etc/ld.so.conf文件,或者修改LD_LIBRARY_PATH環(huán)境變量,或者將庫(kù)文件直接復(fù)制到/lib或者/usr/lib目錄下(這兩個(gè)目錄為系統(tǒng)的默認(rèn)的庫(kù)路徑名)。

            [root@localhostlib]#cplibpow.so/lib

            [root@localhostlib]#./pow_test210

            2^10=1024

            動(dòng)態(tài)庫(kù)只有當(dāng)使用它的程序執(zhí)行時(shí)才被鏈接使用,而不是將需要的部分直接編譯入可執(zhí)行文件中,并且一個(gè)動(dòng)態(tài)庫(kù)可以被多個(gè)程序使用故可稱(chēng)為共享庫(kù),而靜態(tài)庫(kù)將會(huì)整合到程序中,因此在程序執(zhí)行時(shí)不用加載靜態(tài)庫(kù)。從而可知,鏈接到靜態(tài)庫(kù)會(huì)使用戶(hù)的程序臃腫,并且難以升級(jí),但是可能會(huì)比較容易部署。而鏈接到動(dòng)態(tài)庫(kù)會(huì)使用戶(hù)的程序輕便,并且易于升級(jí),但是會(huì)難以部署。

            (3)告警和出錯(cuò)選項(xiàng)。

            gcc的告警和出錯(cuò)選項(xiàng)如表3.9所示。

            表3.9 gcc警告和出錯(cuò)選項(xiàng)選項(xiàng)列表

            選項(xiàng)

            含義

            -ansi

            支持符合ANSI標(biāo)準(zhǔn)的C程序

            -pedantic

            允許發(fā)出ANSIC標(biāo)準(zhǔn)所列的全部警告信息

            -pedantic-error

            允許發(fā)出ANSIC標(biāo)準(zhǔn)所列的全部錯(cuò)誤信息

            -w

            關(guān)閉所有告警

            -Wall

            允許發(fā)出gcc提供的所有有用的報(bào)警信息

            -werror

            把所有的告警信息轉(zhuǎn)化為錯(cuò)誤信息,并在告警發(fā)生時(shí)終止編譯過(guò)程

            下面結(jié)合實(shí)例對(duì)這幾個(gè)告警和出錯(cuò)選項(xiàng)進(jìn)行簡(jiǎn)單的講解。

            有以下程序段:

            #includestdio.h>

            voidmain()

            {

            longlongtmp=1;

            printf(Thisisabadcode!n);

            return0;

            }

            這是一個(gè)很糟糕的程序,讀者可以考慮一下有哪些問(wèn)題。

            n “-ansi”

            該選項(xiàng)強(qiáng)制gcc生成標(biāo)準(zhǔn)語(yǔ)法所要求的告警信息,盡管這還并不能保證所有沒(méi)有警告的程序都是符合ANSIC標(biāo)準(zhǔn)的。運(yùn)行結(jié)果如下所示:

            [root@localhostgcc]#gcc–ansiwarning.c–owarning

            warning.c:在函數(shù)“main”中:

            warning.c:7警告:在無(wú)返回值的函數(shù)中,“return”帶返回值

            warning.c:4警告:“main”的返回類(lèi)型不是“int”

            可以看出,該選項(xiàng)并沒(méi)有發(fā)現(xiàn)“longlong”這個(gè)無(wú)效數(shù)據(jù)類(lèi)型的錯(cuò)誤。

            n “-pedantic”

            打印ANSIC標(biāo)準(zhǔn)所列出的全部警告信息,同樣也保證所有沒(méi)有警告的程序都是符合ANSIC標(biāo)準(zhǔn)的。其運(yùn)行結(jié)果如下所示:

            [root@localhostgcc]#gcc–pedanticwarning.c–owarning

            warning.c:在函數(shù)“main”中:

            warning.c:5警告:ISOC90不支持“longlong”

            warning.c:7警告:在無(wú)返回值的函數(shù)中,“return”帶返回值

            warning.c:4警告:“main”的返回類(lèi)型不是“int”

            可以看出,使用該選項(xiàng)查出了“longlong”這個(gè)無(wú)效數(shù)據(jù)類(lèi)型的錯(cuò)誤。

            n “-Wall”

            打印gcc能夠提供的所有有用的報(bào)警信息。該選項(xiàng)的運(yùn)行結(jié)果如下所示:

            [root@localhostgcc]#gcc–Wallwarning.c–owarning

            warning.c:4警告:“main”的返回類(lèi)型不是“int”

            warning.c:在函數(shù)“main”中:

            warning.c:7警告:在無(wú)返回值的函數(shù)中,“return”帶返回值

            warning.c:5警告:未使用的變量“tmp”

            使用“-Wall”選項(xiàng)找出了未使用的變量tmp,但它并沒(méi)有找出無(wú)效數(shù)據(jù)類(lèi)型的錯(cuò)誤。

            另外,gcc還可以利用選項(xiàng)對(duì)單獨(dú)的常見(jiàn)錯(cuò)誤分別指定警告。

            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

            linux相關(guān)文章:linux教程


            c++相關(guān)文章:c++教程




            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉