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

首頁 > 編程 > C > 正文

GCC 編譯c程序的方法及過程解析

2020-01-26 15:37:36
字體:
來源:轉載
供稿:網友

目前 Linux 下最常用的 C 語言編譯器是 GCC ( GNU Compiler Collection ),它是 GNU 項目中符合 ANSI C 標準的編譯系統,能夠編譯用 C 、 C++ 和 Object C 等語言編寫的程序。 GCC 不僅功能非常強大,結構也異常靈活。最值得稱道的一點就是它可以通過不同的前端模塊來支持各種語言,如Java 、 Fortran 、 Pascal 、 Modula-3 和 Ada 等。開放、自由和靈活是 Linux 的魅力所在,而這一點在 GCC 上的體現就是程序員通過它能夠更好地控制整個編譯過程。在使用 GCC 編譯程序時,編譯過程可以被細分為四個階段:

預處理( Pre-Processing )
編譯( Compiling )
匯編( Asse mbling )
鏈接( Linking )
Linux 程序員可以根據自己的需要讓 GCC 在編譯的任何階段結束,以便檢查或使用編譯器在該階段的輸出信息,或者對最后生成的二進制文件進行控制,以便通過加入不同數量和種類的調試代碼來為今后的調試做好準備。和其它常用的編譯器一樣, GCC 也提供了靈活而強大的代碼優化功能,利用它可以生成執行效率更高的代碼。
GCC 提供了 30 多條警告信息和三個警告級別,使用它們有助于增強程序的穩定性和可移植性。此外, GCC 還對標準的 C 和 C++ 語言進行了大量的擴展,提高程序的執行效率,有助于編譯器進行代碼優化,能夠減輕編程的工作量。

C 程序的編譯過程主要分為四個階段:pre-processing,compiling,assembling,linking;

常用文件的后綴名:

gcc 預處理階段:主要對包含的頭文件(#include )和宏定義(#define,#ifdef … )進行處理??梢允褂谩癵cc -E” 讓gcc 在預處理之后停止編譯過程,生成 *.i 文件。
[root@localhost gcc]# gcc -E hello.c -o hello.i
gcc 編譯階段:gcc 首先要檢查代碼的規范性,是否有語法錯誤等。以確定代碼實際要做的工作,在檢查無誤后,gcc 把代碼翻譯成匯編語言。用戶可以使用-S 選項進行查看,該選項只進
行編譯而不進行匯編,生成匯編代碼。
[root@localhost gcc]# gcc -S hello.i -o hello.s
gcc 匯編階段:生成目標代碼 *.o ;有兩種方式:使用 gcc 直接從源代碼生成目標代碼 gcc -c *.s -o *.o 以及使用匯編器從匯編代碼生成目標代碼 as *.s -o *.o
[root@localhost gcc]# gcc -c hello.s -o hello.o
[root@localhost gcc]# as hello.s -o hello.o
也可以直接使用as *.s, 將執行匯編、鏈接過程生成可執行文件a.out, 可以像上面使用-o 選項指定輸出文件的格式。
gcc 鏈接階段:生成可執行文件;可以生成的可執行文件格式有: a.out/*/,當然可能還有其它格式。
[root@localhost gcc]# gcc hello.o 生成可執行文件 a.out
[root@localhost gcc]# gcc hello.o -o hello 生成可執行文件 hello
gcc 常用編譯選項:

-Dmacro 定義指定的宏,使它能夠通過源碼中的 #ifdef 進行檢驗;

-O 、 -O2 、 -O3 將優化狀態打開,該選項不能與 -g 選項聯合使用;
-v 啟動所有警報,打印編譯過程的信息;
-Wall 在發生警報時取消編譯操作,即將警報看作是錯誤;
-Werror 在發生警報時取消編譯操作,即把報警當作是錯誤;
-w 禁止所有的報警。
gcc 鏈接庫文件的使用
在 linux 下開發軟件時,完全不使用第三方函數庫的情況是比較少見的,通常來講都需要借助一個或多個函數庫的支持才能夠完成相應的功能。從程序員的角度看,函數庫實際上就是一些頭文件( .h )和庫文件( .so 或者 .a )的集合。雖然 Linux 下的大多數函數都默認將頭文件放到/usr/include/ 目錄下,而庫文件則放到 /usr/lib/ 目錄下,但并不是所有的情況都是這樣。正因如此, GCC 在編譯時必須有自己的辦法來查找所需要的頭文件和庫文件。 GCC 采用搜索目錄的辦法來查找所需要的文件, -I 選項可以向 GCC 的頭文件搜索路徑中添加新的目錄。例如,如果在/home/justin/include/ 目錄下有編譯時所需要的頭文件,為了讓 GCC 能夠順利地找到它們,就可以使用 -I 選項:
# gcc foo.c -I /home/justin/include -o foo
同樣,如果使用了不在標準位置的庫文件,那么可以通過 -L 選項向 GCC 的庫文件搜索路徑中添加新的目錄。例如,如果在 /home/xiaowp/lib/ 目錄下有鏈接時所需要的庫文件 libfoo.so ,為了讓 GCC 能夠順利地找到它,可以使用下面的命令:
# gcc foo.c -L /home/justin/lib -lfoo -o foo
值得好好解釋一下的是 -l 選項,它指示 GCC 去連接庫文件 libfoo.so 。
Linux 下的庫文件在命名時有一個約定,那就是應該以lib 三個字母開頭,由于所有的庫文件都遵循了同樣的規范,因此在用-l 選項指定鏈接的庫文件名時可以省去lib 三個字母,也就是說GCC 在對-lfoo 進行處理時,會自動去鏈接名為libfoo.so
Linux 下的庫文件分為兩大類分別是動態鏈接庫(通常以.so 結尾)和靜態鏈接庫(通常以.a 結尾),兩者的差別僅在程序執行時所需的代碼是在運行時動態加載的,還是在編譯時靜態加載的 。默認情況下,GCC 在鏈接時優先使用動態鏈接庫,只有當動態鏈接庫不存在時才考慮使用靜態鏈接庫,如果需要的話可以在編譯時加上-static 選項,強制使用靜態鏈接庫。例如,如果在home/justin/lib/ 目錄下有鏈接時所需要的庫文件libfoo.so 和libfoo.a ,為了讓GCC 在鏈接時只用到靜態鏈接庫,可以使用下面的命令:
# gcc foo.c -L /home/justin/lib -static -lfoo -o foo 的文件。
對于動態庫和靜態庫文件的創建方法,此處不作詳細解釋,可以參考另外一篇linux c 庫文件創建方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久com| 国产精品大陆在线观看| 亚洲人成亚洲人成在线观看| 91美女片黄在线观| 久久躁日日躁aaaaxxxx| 亚洲欧美视频在线| 成人午夜小视频| 欧美激情aaaa| 国产亚洲日本欧美韩国| 91精品中文在线| 国产噜噜噜噜噜久久久久久久久| 亚洲国产精品美女| 日韩欧美在线字幕| 国产精品成人aaaaa网站| 国产一区玩具在线观看| 2019中文在线观看| 亚洲free性xxxx护士白浆| 亚洲激情小视频| 亚洲综合中文字幕在线| 91视频国产一区| 亚洲视频第一页| 国色天香2019中文字幕在线观看| 久久国内精品一国内精品| 国产精品丝袜一区二区三区| 青青久久av北条麻妃海外网| 亚洲人成电影网站色…| zzijzzij亚洲日本成熟少妇| 亚洲一区中文字幕在线观看| 久久精品这里热有精品| 亚洲性夜色噜噜噜7777| 久热爱精品视频线路一| 精品国产乱码久久久久久婷婷| 国产91在线播放九色快色| 亚洲成人1234| 国产精品久久久久久婷婷天堂| 美女黄色丝袜一区| 国产精品成人av在线| 亚洲精品免费在线视频| 久久精视频免费在线久久完整在线看| 亚洲欧美日本伦理| 欧美午夜视频在线观看| 日本精品久久久久影院| 91免费看片网站| 亚洲一区中文字幕在线观看| 久久久电影免费观看完整版| 欧美精品www在线观看| 国产一区私人高清影院| 91精品国产综合久久久久久久久| 久久久精品一区| 欧美日韩在线视频观看| 97久久伊人激情网| 国产精品久久久久久久av电影| 亚洲人成在线播放| 美女扒开尿口让男人操亚洲视频网站| 丁香五六月婷婷久久激情| 亚洲色图35p| 国产97在线播放| 国产专区欧美专区| 国产手机视频精品| 欧美精品在线观看| 另类天堂视频在线观看| 国产精品一区二区电影| 亚洲免费电影一区| 日韩专区中文字幕| 国产精品一区电影| 亚洲第一男人av| 日韩欧美亚洲成人| 一区二区亚洲精品国产| 国外成人性视频| 欲色天天网综合久久| 亚洲精品视频中文字幕| 一区二区三区视频观看| 欧美中文字幕在线| 91情侣偷在线精品国产| 亚洲老板91色精品久久| 日韩成人在线网站| 亚洲韩国日本中文字幕| 国产精品一区久久久| 欧美色视频日本高清在线观看| 欧美亚洲激情视频| 国产网站欧美日韩免费精品在线观看| 欧美片一区二区三区| 久久精品国产久精国产思思| 国产色婷婷国产综合在线理论片a| 精品久久久香蕉免费精品视频| 深夜精品寂寞黄网站在线观看| 国产精品久久婷婷六月丁香| 日韩乱码在线视频| 成人在线视频网站| 欧美xxxx做受欧美.88| 亚洲精品有码在线| 久热爱精品视频线路一| 国产精品88a∨| 国产精品男人的天堂| 亚洲国产福利在线| 97香蕉超级碰碰久久免费软件| 精品中文字幕久久久久久| 日韩女优在线播放| 一区二区在线免费视频| 国产欧美日韩免费看aⅴ视频| 亚洲精品免费一区二区三区| 国产精品自产拍高潮在线观看| 国产精品久久久久久久午夜| 亚洲偷熟乱区亚洲香蕉av| 中文字幕精品一区二区精品| 欧美成人免费一级人片100| 久久久久久国产免费| 欧美精品久久久久久久| 欧美wwwxxxx| 精品色蜜蜜精品视频在线观看| 久久综合免费视频| 91久久久国产精品| 68精品久久久久久欧美| 国产精品日日摸夜夜添夜夜av| 久久国产加勒比精品无码| 伊人成人开心激情综合网| 国产激情视频一区| 欧美精品18videos性欧美| 成人免费视频a| 亚洲欧美日韩一区二区三区在线| 久久久久国产精品免费网站| 日韩大片免费观看视频播放| 亚洲精品在线不卡| 国产精品久久久久久av福利| 久精品免费视频| 91高清免费在线观看| 成人免费视频在线观看超级碰| 日韩精品丝袜在线| 国产精品视频内| 亚洲视频在线免费观看| 欧美精品成人在线| 性欧美激情精品| 国产日韩在线视频| 欧美一区深夜视频| 久久99精品国产99久久6尤物| 在线观看成人黄色| 亚洲综合小说区| 性日韩欧美在线视频| 92国产精品久久久久首页| 欧美午夜宅男影院在线观看| 4p变态网欧美系列| 欧美综合在线第二页| 91久久精品久久国产性色也91| 粗暴蹂躏中文一区二区三区| 在线观看欧美视频| 国产91在线播放精品91| 欧美激情视频一区二区| 亚洲国产精品久久久久久| 欧美视频第一页| 精品国产乱码久久久久久虫虫漫画| 久久成人免费视频| 亚洲aaaaaa| 国产精品久久久久久久久久99| 国产精品久久久久久久久久尿| 欧美大片在线免费观看| 中国人与牲禽动交精品| 久久韩国免费视频| 国产精品激情av在线播放| 日韩精品中文在线观看| 亚洲美女精品成人在线视频| 欧美一级淫片aaaaaaa视频| 欧洲永久精品大片ww免费漫画| 欧美成人合集magnet| 自拍偷拍亚洲在线|