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

隨筆 - 10, 文章 - 1, 評論 - 9, 引用 - 0
數據加載中……

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

什么是gcc、什么是g++

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

但兩者有一些區別:后綴為.c的文件gcc把它當做c程序,g++當做c++程序。后綴為c++的兩者都當做c++程序。對于cpp程序,無論gcc或者是g++編譯階段都是相同的,都是用的gcc進行編譯,但是在鏈接階段gcc不能自動c++程序使用的庫連接,如果使用的話,形如下: gcc helloworld.cpp -lstdc++ -o helloworld

所以我們通常用g++來進行連接(g++會自動連接c++常用庫),所以為了使用方便對于cpp程序干脆編譯鏈接統統都使用g++,這樣就給人一種錯覺,好像cpp只能用g++編譯。

 

Gcc編譯處理過程是什么呢?

下面以helloworld程序為例去進行解釋過程:

其中hello.c的內容如下:

#include<stdio.h> 

int main()

{

        printf("hello world\n");

}

第一步:預處理

       預處理階段過程如下,預處理階段是進行處理代碼中的宏和include指令,并作語法檢查。這一過程的命令為:#  gcc -E hello.c -o hello.i 執行這一部生成了一個hello.i文件,如下:


可以看到由于進行了預處理,將include內部的文件進行了替換,預處理后的結果文件顯得特別大,所以在以后的程序中,沒有用到的頭文件最好不要引入,這樣會降低處理時間和空間。

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

這一步是將預處理文件進行匯編,生成匯編程序,命令如下:

可以看出生成的匯編程序為59行。

第三步:由匯編程序轉換為中間目標文件

這一步是將匯編的代碼進一步進行處理,每一個源程序都會生成相應的目標文件,是以.o為擴展名的文件。命令如下:

 

第四步:連接目標文件,生成可執行程序

這一階段被稱為鏈接階段,這一階段完成的是將目標文件進行連接生成相應的最終目標文件(可執行文件或靜態庫或動態庫)


好了,這樣例子中的可執行文件就生成了hello,運行一下為:

如何使用g++編譯動態庫\靜態庫?如何使用g++連接非標準庫和應用程序?

什么是庫呢?簡單的說庫就是一組已經寫好了的函數和變量、是經過編譯了的代碼,為了提高開發的效率和運行的效率而設計的。庫可以分為靜態庫和動態庫(共享庫)兩類,在linux系統中靜態庫的擴展名為.a,動態庫的擴展名是.so

靜態庫是在每個程序進行鏈接的時候將庫在目標程序中進行一次拷貝,當目標程序生成的時候,程序可以脫離庫文件單獨運行,換言之原來的文件即使刪除程序還是會正常工作。

共享庫可以被多個應用程序共享,實在程序運行的時候進行動態的加載,因此對于每個應用程序來說,即使不再使用某個共享庫,也不應該將其刪除,因為其他的引用程序可能需要這個庫。

1.       如何生成庫

下面演示如何生成靜態庫和動態庫:

生成靜態庫的過程是先將每個每個原文件進行編譯生成中間目標文件,然后利用打包程序,將程序進行一次打包,最后生成靜態庫文件。以下面的例子說明問題:

目錄結構為


包括3個文件,其中hello.c是用來生成靜態庫的源文件,hello.h是其頭文件,test.c是其測試程序,用來測試庫生成是否正確,在這個例子中我們會將hello.c生成libhello.a,然后用test.cpp進行連接,最后生成hello的可執行文件。

首先生成庫文件,

然后通過鏈接靜態庫文件,將test.clibhello.a生成相應的應用程序testhello

在這個例子中,我們刪除靜態庫后,程序依然正常運行。

下面通過生成動態庫連接成為應用程序,生成動態庫的命令是

gcc -shared -fPIC  hello.c -o libhello.so這樣就生成了動態庫


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

如果刪除之后,在運行就會:

 

從上面可知,如果在小的項目中使用gcc還是比較方便的,如果再大的工程中,我們必須記住gcc命令,如果想讓程序做移植的話,必須還得充足的文檔才能管理大項目。下面提供一種解決方法,通過makefile來解決這些問題,當你移植你的程序時只需要做簡單的操作,就能成功生成相應的二進制文件,從而簡化了大項目的管理等問題。

 

GCC編譯器的選項解讀

1. 基本選項

-E是只進行預處理選項,不進行編譯、匯編、以及連接

-S 編譯后停止,不進行會變和連接

-c編譯或會匯編文件,但不進行連接

-o file 指定輸出文件名

2. 警告選項

-Wall 啟用所有警告信息

-Werror 在發生警告時取消編譯操作,即將警報看作是錯誤

-w 禁用所有警告信息

3. 優化選項

-O0:不進行優化處理

-O或-O1:進行基本的優化,這些優化在大所屬情況下都會使程序執行的更快

-O2:除了完成-O1級別的優化外,還需要一些其他的調整工作,如處理器指令調度等,只是GNU發布軟件的默認優化

-O3:除了完成-O2級別的優化外,還進行循環的展開(這往往會提高執行速度)以及其他的一些預處理器相關的優化工作。

-Os:生成最小的可執行文件,主要用在嵌入式領域。

4. 連接器選項

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

-Ldirectory 向GCC的庫文件搜索路徑中添加一個行的目錄

-llibrary 提示連接程序在創建可執行文件時包含指定的庫文件

-static 強制使用靜態庫

-shared 強制使用共享庫

5. 其他選項

-xlanguage 指定輸入文件的編程語言

-v 顯示編譯器的版本號

-g 獲得有關調試程序的詳細信息

-ansi 支持符合ansi彼岸準的c程序

 

 

既然已經講了這么多了索性再講講gcc使用的一些環境變量

除了大名鼎鼎的CFLAGS和CXXFLAGS以外(其實是Autoconf的環境變量),再挑幾個說說:

所有的PATH類環境變量(除LD_RUN_PATH外)都是用冒號分割的目錄列表。

 

C_INCLUDE_PATH 編譯C程序時使用的環境變量,用于查找頭文件。

 

CPLUS_INCLUDE_PATH 編譯C++程序時使用的環境變量,用于查找頭文件。

 

OBJC_INCLUDE_PATH 編譯Obj-C程序時使用的環境變量,用于查找頭文件。

 

CPATH 編譯C/C++/Obj-C程序時使用的環境變量,用于查找頭文件。

 

COMPILER_PATH 如果沒有用GCC_EXEC_PREFIX定位子程序,編譯程序將會在此查找它的子程序。

 

LIBRARY_PATH 連接程序將在這些目錄中尋找特殊的連接程序文件。

 

LD_LIBRARY_PATH 該環境變量不影響編譯程序,但是程序運行的時候會有影響:程序會查找該目錄列表以尋找共享庫。

當不能夠在編譯程序的目錄中找到共享庫的時候,執行程序必須設置該環境變量。

 

LD_RUN_PATH 該環境變量不影響編譯程序,但是程序運行的時候會有影響:它在運行時指出了文件的名字,運行的程序可以由此得到它的符號名字和地址。

由于地址不會重新載入,因而可能符號應用其他文件中的絕對地址。這個和ld工具使用的"-R"選項完全一樣。

 

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

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

 

LANG 指定編譯程序使用的字符集,可用于創建寬字符文件、串文字、注釋;默認為英文。[目前只支持日文"C-JIS,C-SJIS,C-EUCJP",不支持中文]

 

LC_ALL 指定多字節字符的字符分類,主要用于確定字符串的字符邊界以及編譯程序使用何種語言發出診斷消息;默認設置與LANG相同。

中文相關的幾項:"zh_CN.GB2312 , zh_CN.GB18030 , zh_CN.GBK , zh_CN.UTF-8 , zh_TW.BIG5"

 

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

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

評論

# re: C++編譯器 GCC G++ 使用  回復  更多評論   

Nice work!
2011-11-14 19:00 | tangb4c
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99精品国产福利在线观看免费| 欧美色区777第一页| 女女同性精品视频| 久久亚洲综合色一区二区三区| 久久精品国产99精品国产亚洲性色 | 欧美中文在线观看| 久久激情一区| 麻豆av一区二区三区| 欧美韩国一区| 国产精品美女| 激情综合电影网| 亚洲精品综合精品自拍| 亚洲欧美日本精品| 久久亚洲私人国产精品va媚药| 欧美国产日韩在线| 亚洲图片在线观看| 久久人人看视频| 欧美视频国产精品| 激情一区二区三区| 亚洲天堂激情| 久久日韩粉嫩一区二区三区| 最新日韩在线视频| 亚洲伊人伊色伊影伊综合网| 久久久久久久久一区二区| 欧美日韩成人综合天天影院| 国模叶桐国产精品一区| 夜夜狂射影院欧美极品| 久久精品亚洲| 乱码第一页成人| 久久成人av少妇免费| 欧美大胆a视频| 国产无遮挡一区二区三区毛片日本| 在线观看视频日韩| 午夜亚洲激情| 亚洲精品国产品国语在线app| 久久成人在线| 国产精品亚洲视频| 一区二区精品在线| 欧美成人资源网| 欧美中文字幕| 国产欧美日本| 亚洲欧美日韩国产综合| 最近中文字幕日韩精品 | 亚洲国产专区校园欧美| 欧美在线视频在线播放完整版免费观看| 欧美精品色综合| 亚洲人成啪啪网站| 欧美激情日韩| 久久婷婷国产麻豆91天堂| 国产一区二区三区观看| 亚洲欧美视频一区二区三区| 日韩香蕉视频| 欧美美女bbbb| 一区二区三区欧美激情| 亚洲激情电影中文字幕| 欧美国产欧美综合| 日韩视频精品在线观看| 亚洲欧洲日本在线| 欧美国产亚洲另类动漫| 亚洲精品日韩在线观看| 亚洲黄一区二区三区| 欧美精品日韩精品| av成人免费在线| 99视频在线观看一区三区| 欧美日韩亚洲在线| 亚洲欧美国产日韩中文字幕| 中日韩美女免费视频网址在线观看| 欧美日韩一区二区三区视频 | 激情综合久久| 蜜桃伊人久久| 美女精品在线观看| 亚洲精品免费在线观看| 亚洲精选中文字幕| 国产精品久久久久久亚洲调教 | 亚洲高清自拍| 欧美人成网站| 亚洲欧美日韩国产一区| 亚洲宅男天堂在线观看无病毒| 国产精品永久免费在线| 久久欧美中文字幕| 欧美韩日亚洲| 91久久久久久久久| 国产一区二区三区四区| 麻豆av一区二区三区久久| 母乳一区在线观看| 亚洲视频在线观看三级| 午夜在线观看免费一区| 亚洲国产高清在线| 夜夜嗨av一区二区三区四季av | 香蕉av福利精品导航| 伊人久久大香线蕉av超碰演员| 91久久久国产精品| 国产精品mv在线观看| 久久久久久久网| 欧美另类久久久品| 久久久99国产精品免费| 欧美jizzhd精品欧美巨大免费| 亚洲欧美精品在线| 玖玖国产精品视频| 午夜精品免费视频| 美女爽到呻吟久久久久| 午夜精品视频在线观看| 免费久久99精品国产| 亚洲欧美日韩精品一区二区| 久久综合伊人77777| 午夜精品剧场| 欧美日韩亚洲一区三区| 免费观看日韩av| 国产欧美日韩综合精品二区| 欧美黄色一区| 精品99一区二区| 亚洲一区图片| 亚洲一区二区三区成人在线视频精品 | 久久激情中文| 性欧美xxxx大乳国产app| 欧美成人久久| 噜噜噜噜噜久久久久久91| 国产精品视频成人| 日韩视频在线免费| 亚洲日本激情| 蜜桃av噜噜一区| 欧美激情按摩在线| 在线看一区二区| 久久精品国产2020观看福利| 欧美在线视频一区| 国产精品免费网站| 一个色综合导航| 亚洲深夜福利视频| 欧美日本一道本| 欧美国产视频日韩| 亚洲国产成人午夜在线一区| 久久久噜噜噜久久中文字免| 久久久久久高潮国产精品视| 国产精品视频久久| 亚洲一级高清| 欧美亚洲网站| 国产精品午夜在线观看| 亚洲图片欧美午夜| 香蕉久久一区二区不卡无毒影院| 国产精品播放| 亚洲一级片在线观看| 免费欧美电影| 亚洲欧洲日本在线| 国内综合精品午夜久久资源| 欧美一区91| 久热精品视频在线观看| 一区久久精品| 米奇777超碰欧美日韩亚洲| 亚洲国产精品电影在线观看| 一区二区三区视频在线播放| 欧美亚洲成人精品| 亚洲欧美一区二区原创| 久久亚洲一区二区三区四区| 亚洲第一级黄色片| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲第一网站| 亚洲视频图片小说| 国产精品蜜臀在线观看| 久久都是精品| 亚洲黄色影片| 性欧美精品高清| 精品福利av| 欧美色视频一区| 欧美一区二区三区免费在线看| 欧美91大片| 亚洲网站在线看| 国产一区二区三区日韩| 欧美成人黄色小视频| 亚洲色图综合久久| 久久久噜噜噜久久久| 99国内精品| 国产亚洲网站| 欧美日韩精品系列| 久久漫画官网| 一区二区三区视频在线播放| 另类成人小视频在线| 一本在线高清不卡dvd| 国产一区久久| 欧美色播在线播放| 另类亚洲自拍| 亚洲在线视频观看| 91久久夜色精品国产网站| 久久精品成人一区二区三区蜜臀| 99综合电影在线视频| 有码中文亚洲精品| 国产精品一区二区在线观看| 欧美国产日韩亚洲一区| 欧美在线亚洲| 亚洲一区一卡| 日韩视频一区二区三区在线播放| 久久天堂成人| 欧美中文日韩| 亚洲一区二区三区四区在线观看 | 美女在线一区二区| 亚洲欧美福利一区二区| 亚洲国产精品久久精品怡红院| 久久久久久久久久久成人| 亚洲小说欧美另类婷婷| 亚洲精品中文字幕女同| 狠狠干综合网|