<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/257151.htm

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

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

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

          [root@localhostlib]#gcc-cunsgn_pow.c

          [root@localhostlib]#arrcsvlibpow.aunsgn_pow.o

          a-unsgn_pow.o

          下面編譯主程序,它將會鏈接到剛生成的靜態(tài)庫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”類似,能夠在庫文件的搜索路徑列表中添加dir目錄,而“-lname”選項(xiàng)指示編譯時鏈接到庫文件libname.a或者libname.so。本實(shí)例中,程序pow_test.c需要使用當(dāng)前目錄下的一個靜態(tài)庫libpow.a。

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

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

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

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

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

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

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

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

          [root@localhostlib]#cplibpow.so/lib

          [root@localhostlib]#./pow_test210

          2^10=1024

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

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

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

          表3.9 gcc警告和出錯選項(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)所列的全部錯誤信息

          -w

          關(guān)閉所有告警

          -Wall

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

          -werror

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

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

          有以下程序段:

          #includestdio.h>

          voidmain()

          {

          longlongtmp=1;

          printf(Thisisabadcode!n);

          return0;

          }

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

          n “-ansi”

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

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

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

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

          warning.c:4警告:“main”的返回類型不是“int”

          可以看出,該選項(xiàng)并沒有發(fā)現(xiàn)“longlong”這個無效數(shù)據(jù)類型的錯誤。

          n “-pedantic”

          打印ANSIC標(biāo)準(zhǔn)所列出的全部警告信息,同樣也保證所有沒有警告的程序都是符合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警告:在無返回值的函數(shù)中,“return”帶返回值

          warning.c:4警告:“main”的返回類型不是“int”

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

          n “-Wall”

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

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

          warning.c:4警告:“main”的返回類型不是“int”

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

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

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

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

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

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

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


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




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();