青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

吾嘗終日而思矣 不如須臾之所學(xué)也

御物而行 御風(fēng)而飛
隨筆 - 10, 文章 - 1, 評(píng)論 - 9, 引用 - 0
數(shù)據(jù)加載中……

C++編譯器 GCC G++ 使用

什么是gcc、什么是g++

gccg++都是GNU(組織)的一個(gè)編譯器。

但兩者有一些區(qū)別:后綴為.c的文件gcc把它當(dāng)做c程序,g++當(dāng)做c++程序。后綴為c++的兩者都當(dāng)做c++程序。對(duì)于cpp程序,無(wú)論gcc或者是g++編譯階段都是相同的,都是用的gcc進(jìn)行編譯,但是在鏈接階段gcc不能自動(dòng)c++程序使用的庫(kù)連接,如果使用的話(huà),形如下: gcc helloworld.cpp -lstdc++ -o helloworld

所以我們通常用g++來(lái)進(jìn)行連接(g++會(huì)自動(dòng)連接c++常用庫(kù)),所以為了使用方便對(duì)于cpp程序干脆編譯鏈接統(tǒng)統(tǒng)都使用g++,這樣就給人一種錯(cuò)覺(jué),好像cpp只能用g++編譯。

 

Gcc編譯處理過(guò)程是什么呢?

下面以helloworld程序?yàn)槔ミM(jìn)行解釋過(guò)程:

其中hello.c的內(nèi)容如下:

#include<stdio.h> 

int main()

{

        printf("hello world\n");

}

第一步:預(yù)處理

       預(yù)處理階段過(guò)程如下,預(yù)處理階段是進(jìn)行處理代碼中的宏和include指令,并作語(yǔ)法檢查。這一過(guò)程的命令為:#  gcc -E hello.c -o hello.i 執(zhí)行這一部生成了一個(gè)hello.i文件,如下:


可以看到由于進(jìn)行了預(yù)處理,將include內(nèi)部的文件進(jìn)行了替換,預(yù)處理后的結(jié)果文件顯得特別大,所以在以后的程序中,沒(méi)有用到的頭文件最好不要引入,這樣會(huì)降低處理時(shí)間和空間。

第二步:匯編程序生成匯編碼

這一步是將預(yù)處理文件進(jìn)行匯編,生成匯編程序,命令如下:

可以看出生成的匯編程序?yàn)?/span>59行。

第三步:由匯編程序轉(zhuǎn)換為中間目標(biāo)文件

這一步是將匯編的代碼進(jìn)一步進(jìn)行處理,每一個(gè)源程序都會(huì)生成相應(yīng)的目標(biāo)文件,是以.o為擴(kuò)展名的文件。命令如下:

 

第四步:連接目標(biāo)文件,生成可執(zhí)行程序

這一階段被稱(chēng)為鏈接階段,這一階段完成的是將目標(biāo)文件進(jìn)行連接生成相應(yīng)的最終目標(biāo)文件(可執(zhí)行文件或靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù))


好了,這樣例子中的可執(zhí)行文件就生成了hello,運(yùn)行一下為:

如何使用g++編譯動(dòng)態(tài)庫(kù)\靜態(tài)庫(kù)?如何使用g++連接非標(biāo)準(zhǔn)庫(kù)和應(yīng)用程序?

什么是庫(kù)呢?簡(jiǎn)單的說(shuō)庫(kù)就是一組已經(jīng)寫(xiě)好了的函數(shù)和變量、是經(jīng)過(guò)編譯了的代碼,為了提高開(kāi)發(fā)的效率和運(yùn)行的效率而設(shè)計(jì)的。庫(kù)可以分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)(共享庫(kù))兩類(lèi),在linux系統(tǒng)中靜態(tài)庫(kù)的擴(kuò)展名為.a,動(dòng)態(tài)庫(kù)的擴(kuò)展名是.so

靜態(tài)庫(kù)是在每個(gè)程序進(jìn)行鏈接的時(shí)候?qū)?kù)在目標(biāo)程序中進(jìn)行一次拷貝,當(dāng)目標(biāo)程序生成的時(shí)候,程序可以脫離庫(kù)文件單獨(dú)運(yùn)行,換言之原來(lái)的文件即使刪除程序還是會(huì)正常工作。

共享庫(kù)可以被多個(gè)應(yīng)用程序共享,實(shí)在程序運(yùn)行的時(shí)候進(jìn)行動(dòng)態(tài)的加載,因此對(duì)于每個(gè)應(yīng)用程序來(lái)說(shuō),即使不再使用某個(gè)共享庫(kù),也不應(yīng)該將其刪除,因?yàn)槠渌囊贸绦蚩赡苄枰@個(gè)庫(kù)。

1.       如何生成庫(kù)

下面演示如何生成靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù):

生成靜態(tài)庫(kù)的過(guò)程是先將每個(gè)每個(gè)原文件進(jìn)行編譯生成中間目標(biāo)文件,然后利用打包程序,將程序進(jìn)行一次打包,最后生成靜態(tài)庫(kù)文件。以下面的例子說(shuō)明問(wèn)題:

目錄結(jié)構(gòu)為


包括3個(gè)文件,其中hello.c是用來(lái)生成靜態(tài)庫(kù)的源文件,hello.h是其頭文件,test.c是其測(cè)試程序,用來(lái)測(cè)試庫(kù)生成是否正確,在這個(gè)例子中我們會(huì)將hello.c生成libhello.a,然后用test.cpp進(jìn)行連接,最后生成hello的可執(zhí)行文件。

首先生成庫(kù)文件,

然后通過(guò)鏈接靜態(tài)庫(kù)文件,將test.clibhello.a生成相應(yīng)的應(yīng)用程序testhello

在這個(gè)例子中,我們刪除靜態(tài)庫(kù)后,程序依然正常運(yùn)行。

下面通過(guò)生成動(dòng)態(tài)庫(kù)連接成為應(yīng)用程序,生成動(dòng)態(tài)庫(kù)的命令是

gcc -shared -fPIC  hello.c -o libhello.so這樣就生成了動(dòng)態(tài)庫(kù)


在把so所在的路徑在環(huán)境變量里添加上,注意應(yīng)該添加到LD_LIBRARY_PATH中,另外還要運(yùn)行命令ldconfig,此命令在/sbin/目錄下。這樣就能正常運(yùn)行了。下面是測(cè)試:

如果刪除之后,在運(yùn)行就會(huì):

 

從上面可知,如果在小的項(xiàng)目中使用gcc還是比較方便的,如果再大的工程中,我們必須記住gcc命令,如果想讓程序做移植的話(huà),必須還得充足的文檔才能管理大項(xiàng)目。下面提供一種解決方法,通過(guò)makefile來(lái)解決這些問(wèn)題,當(dāng)你移植你的程序時(shí)只需要做簡(jiǎn)單的操作,就能成功生成相應(yīng)的二進(jìn)制文件,從而簡(jiǎn)化了大項(xiàng)目的管理等問(wèn)題。

 

GCC編譯器的選項(xiàng)解讀

1. 基本選項(xiàng)

-E是只進(jìn)行預(yù)處理選項(xiàng),不進(jìn)行編譯、匯編、以及連接

-S 編譯后停止,不進(jìn)行會(huì)變和連接

-c編譯或會(huì)匯編文件,但不進(jìn)行連接

-o file 指定輸出文件名

2. 警告選項(xiàng)

-Wall 啟用所有警告信息

-Werror 在發(fā)生警告時(shí)取消編譯操作,即將警報(bào)看作是錯(cuò)誤

-w 禁用所有警告信息

3. 優(yōu)化選項(xiàng)

-O0:不進(jìn)行優(yōu)化處理

-O或-O1:進(jìn)行基本的優(yōu)化,這些優(yōu)化在大所屬情況下都會(huì)使程序執(zhí)行的更快

-O2:除了完成-O1級(jí)別的優(yōu)化外,還需要一些其他的調(diào)整工作,如處理器指令調(diào)度等,只是GNU發(fā)布軟件的默認(rèn)優(yōu)化

-O3:除了完成-O2級(jí)別的優(yōu)化外,還進(jìn)行循環(huán)的展開(kāi)(這往往會(huì)提高執(zhí)行速度)以及其他的一些預(yù)處理器相關(guān)的優(yōu)化工作。

-Os:生成最小的可執(zhí)行文件,主要用在嵌入式領(lǐng)域。

4. 連接器選項(xiàng)

-Idirectory 向GCC的頭文件搜索路徑中添加新的目錄

-Ldirectory 向GCC的庫(kù)文件搜索路徑中添加一個(gè)行的目錄

-llibrary 提示連接程序在創(chuàng)建可執(zhí)行文件時(shí)包含指定的庫(kù)文件

-static 強(qiáng)制使用靜態(tài)庫(kù)

-shared 強(qiáng)制使用共享庫(kù)

5. 其他選項(xiàng)

-xlanguage 指定輸入文件的編程語(yǔ)言

-v 顯示編譯器的版本號(hào)

-g 獲得有關(guān)調(diào)試程序的詳細(xì)信息

-ansi 支持符合ansi彼岸準(zhǔn)的c程序

 

 

既然已經(jīng)講了這么多了索性再講講gcc使用的一些環(huán)境變量

除了大名鼎鼎的CFLAGS和CXXFLAGS以外(其實(shí)是Autoconf的環(huán)境變量),再挑幾個(gè)說(shuō)說(shuō):

所有的PATH類(lèi)環(huán)境變量(除LD_RUN_PATH外)都是用冒號(hào)分割的目錄列表。

 

C_INCLUDE_PATH 編譯C程序時(shí)使用的環(huán)境變量,用于查找頭文件。

 

CPLUS_INCLUDE_PATH 編譯C++程序時(shí)使用的環(huán)境變量,用于查找頭文件。

 

OBJC_INCLUDE_PATH 編譯Obj-C程序時(shí)使用的環(huán)境變量,用于查找頭文件。

 

CPATH 編譯C/C++/Obj-C程序時(shí)使用的環(huán)境變量,用于查找頭文件。

 

COMPILER_PATH 如果沒(méi)有用GCC_EXEC_PREFIX定位子程序,編譯程序?qū)?huì)在此查找它的子程序。

 

LIBRARY_PATH 連接程序?qū)⒃谶@些目錄中尋找特殊的連接程序文件。

 

LD_LIBRARY_PATH 該環(huán)境變量不影響編譯程序,但是程序運(yùn)行的時(shí)候會(huì)有影響:程序會(huì)查找該目錄列表以尋找共享庫(kù)。

當(dāng)不能夠在編譯程序的目錄中找到共享庫(kù)的時(shí)候,執(zhí)行程序必須設(shè)置該環(huán)境變量。

 

LD_RUN_PATH 該環(huán)境變量不影響編譯程序,但是程序運(yùn)行的時(shí)候會(huì)有影響:它在運(yùn)行時(shí)指出了文件的名字,運(yùn)行的程序可以由此得到它的符號(hào)名字和地址。

由于地址不會(huì)重新載入,因而可能符號(hào)應(yīng)用其他文件中的絕對(duì)地址。這個(gè)和ld工具使用的"-R"選項(xiàng)完全一樣。

 

GCC_EXEC_PREFIX 編譯程序執(zhí)行所有子程序的名字的前綴,默認(rèn)值是"<prefix>/lib/gcc-lib/",

其中的<prefix>是安裝時(shí)configure腳本指定的前綴。

 

LANG 指定編譯程序使用的字符集,可用于創(chuàng)建寬字符文件、串文字、注釋?zhuān)荒J(rèn)為英文。[目前只支持日文"C-JIS,C-SJIS,C-EUCJP",不支持中文]

 

LC_ALL 指定多字節(jié)字符的字符分類(lèi),主要用于確定字符串的字符邊界以及編譯程序使用何種語(yǔ)言發(fā)出診斷消息;默認(rèn)設(shè)置與LANG相同。

中文相關(guān)的幾項(xiàng):"zh_CN.GB2312 , zh_CN.GB18030 , zh_CN.GBK , zh_CN.UTF-8 , zh_TW.BIG5"

 

TMPDIR 編譯程序存放臨時(shí)工作文件的臨時(shí)目錄,這些臨時(shí)文件通常在編譯結(jié)束時(shí)被刪除。

posted on 2011-11-13 15:01 Roger 閱讀(11470) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: C++編譯器 GCC G++ 使用  回復(fù)  更多評(píng)論   

Nice work!
2011-11-14 19:00 | tangb4c

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国av一区二区三区在线观看| 亚洲激情社区| 国产视频在线观看一区二区三区| 欧美日本国产| 欧美精品一区二区三区视频| 欧美大片91| 欧美色中文字幕| 国产精品入口麻豆原神| 国产模特精品视频久久久久| 国产日本亚洲高清| 国产中文一区二区三区| 狠狠色狠狠色综合| 先锋影音久久久| 一区二区三区四区在线| 亚洲一区二区三区中文字幕在线| 在线亚洲成人| 久久激情一区| 欧美成人免费网| 亚洲精品欧美激情| 午夜久久美女| 欧美国产日韩a欧美在线观看| 国产精品www| 国外成人网址| 亚洲美女视频在线观看| 欧美一区二区三区免费观看| 裸体一区二区三区| 99亚洲伊人久久精品影院红桃| 久久xxxx精品视频| 欧美激情一区二区| 国产自产在线视频一区| 日韩一本二本av| 久久免费高清视频| 一区二区欧美在线| 欧美大片在线观看| 一区二区亚洲精品| 久久国产日韩| 亚洲一区二区久久| 欧美日韩在线视频一区二区| 亚洲国产一区二区精品专区| 久久精品一区蜜桃臀影院| 一本色道久久综合狠狠躁篇的优点 | 亚洲欧美国产精品专区久久| 欧美成人自拍视频| 一区二区三区亚洲| 性色av一区二区三区在线观看| 亚洲国产精品电影| 久久久久久自在自线| 国产亚洲美州欧州综合国| 亚洲一区二区免费| 亚洲毛片av在线| 欧美激情影院| 亚洲精品久久久蜜桃| 蜜月aⅴ免费一区二区三区| 香蕉av777xxx色综合一区| 欧美婷婷在线| 亚洲欧美精品在线观看| av成人免费在线观看| 欧美日韩你懂的| 亚洲精品在线一区二区| 亚洲国产精品热久久| 欧美xart系列高清| 日韩午夜在线| 亚洲精品久久久久久久久| 欧美xart系列高清| 中文有码久久| 亚洲天堂成人在线视频| 亚洲小说春色综合另类电影| 亚洲国产精品国自产拍av秋霞| 久久这里只有| 91久久精品国产91久久| 欧美成人精品一区| 免费成人你懂的| 日韩视频在线你懂得| 亚洲免费精品| 国产精品嫩草影院一区二区| 欧美中文字幕不卡| 久久人人97超碰精品888| 91久久综合| 亚洲图片欧美日产| 黄色成人91| 亚洲精品久久| 国产日韩在线亚洲字幕中文| 久久麻豆一区二区| 欧美福利一区二区三区| 亚洲一区二区精品在线| 亚洲综合三区| 亚洲成人在线观看视频| 亚洲人体大胆视频| 国产美女精品| 欧美激情中文字幕乱码免费| 欧美日韩无遮挡| 久久精品主播| 免费成人你懂的| 性欧美办公室18xxxxhd| 久久中文字幕一区二区三区| 一本色道久久综合亚洲91| 欧美影院在线播放| 亚洲私人影吧| 久久久噜噜噜久噜久久| 一本色道婷婷久久欧美| 久久国产精品久久久久久| 中国亚洲黄色| 久久一区亚洲| 久久精品30| 国产精品www网站| 欧美v亚洲v综合ⅴ国产v| 欧美日在线观看| 欧美成人免费网站| 国产日韩精品视频一区二区三区 | 久久久久久网站| 欧美国产综合视频| 久久久久久久激情视频| 欧美日韩在线高清| 欧美波霸影院| 国产亚洲毛片| 亚洲香蕉视频| 一区二区欧美激情| 欧美成人免费在线| 欧美99在线视频观看| 国产麻豆9l精品三级站| 亚洲人精品午夜在线观看| 在线观看日韩www视频免费| 亚洲一区二区三区午夜| 一区二区高清视频| 欧美国产91| 亚洲黄色大片| 亚洲另类一区二区| 欧美**人妖| 亚洲国产老妈| 在线视频精品一区| 日韩一级网站| 你懂的网址国产 欧美| 亚洲一区二区三区中文字幕| 欧美影视一区| 久久精品日韩| 久久国产日本精品| 久久精品一区四区| 美日韩精品视频| 久久精品99国产精品日本| 国产精品99久久久久久宅男 | 欧美国产在线视频| 蜜臀av性久久久久蜜臀aⅴ| 免费成人在线观看视频| 两个人的视频www国产精品| 欧美日韩精品欧美日韩精品一| 欧美日韩一级片在线观看| 国产日韩av高清| 在线播放不卡| 亚洲一区免费看| 亚洲欧洲在线看| 夜夜嗨av色综合久久久综合网| 欧美有码视频| 欧美日韩精品在线视频| 红桃视频一区| 性欧美18~19sex高清播放| 亚洲国产成人在线视频| 亚洲视频播放| 欧美日韩视频在线| 亚洲大胆人体视频| 久久野战av| 亚洲美女中文字幕| 欧美成人黑人xx视频免费观看| 国产九九精品视频| 中文在线资源观看视频网站免费不卡| 久久视频这里只有精品| 一区二区日韩| 国产精品久久中文| 欧美精品一区二区三| 在线观看亚洲视频| 欧美国产日韩精品| 亚洲日本一区二区三区| 欧美国产视频一区二区| 日韩午夜在线播放| 久久精品国产免费| 亚洲欧洲精品天堂一级| 国产精品av免费在线观看| 欧美一区二区三区免费在线看 | 久久精品久久综合| 亚洲高清视频中文字幕| 亚洲一区二区三区三| 好看的亚洲午夜视频在线| 欧美日韩国产欧美日美国产精品| 午夜久久99| 99国产精品视频免费观看| 久久综合国产精品| 亚洲视频综合| 亚洲三级免费电影| 黑人中文字幕一区二区三区 | 欧美福利视频| 亚洲欧美在线看| 日韩视频不卡| 亚洲国产一区二区三区青草影视| 久久成人18免费网站| 亚洲视频视频在线| 亚洲欧洲视频| 在线播放日韩专区| 国产色视频一区| 国产精品久久久久av免费| 欧美激情一区二区三区在线视频| 久久精品综合一区|