一.
常用編譯命令選項
假設源程式檔名為test.c
。1.
無選項編譯鏈結
用法:#gcc test.c
作用:將test.c
預處理、彙編、編譯並鏈結形成可執行檔案。這裡未指定輸出檔案,預設輸出為
a.out
。2.
選項 -o
用法:#gcc test.c -o test
作用:將test.c
預處理、彙編、編譯並鏈結形成可執行檔案
test。-o
選項用來指定輸出檔案的檔名。
3. 選項 -e
用法:#gcc -e test.c -o test.i
作用:將test.c
預處理輸出
test.i
檔案。4.
選項 -s
用法:#gcc -s test.i
作用:將預處理輸出檔案test.i
彙編成test.s
檔案。5.
選項 -c
用法:#gcc -c test.s
作用:將彙編輸出檔案test.s
編譯輸出
test.o
檔案。
6. 無選項鏈結
用法:#gcc test.o -o test
作用:將編譯輸出檔案test.o
鏈結成最終可執行檔案
test
。7.
選項-o
用法:#gcc -o1 test.c -o test
作用:使用編譯優化級別1
編譯程式。級別為
1~3,級別越大優化效果越好,但編譯時間越長。
二. 多原始檔的編譯方法
如果有多個原始檔,基本上有兩種編譯方法:
[假設有兩個原始檔為
test.c
和testfun.c]
1. 多個檔案一起編譯
用法:#gcc testfun.c test.c -o test
作用:將testfun.c
和test.c
分別編譯後鏈結成
test
可執行檔案。
2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案鏈結。
用法:#gcc -c testfun.c //
將testfun.c
編譯成testfun.o
#gcc -c test.c //
將test.c
編譯成test.o
#gcc testfun.o test.o -o test //
將testfun.o
和test.o
鏈結成test
以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。
三、gcc
程式設計環境基礎--編譯時標頭檔案和庫檔案路徑指定
※預處理
(preprocessing),
編譯(compilation),
彙編(assembly)
和連線(linking)
※include
的header檔案,
鏈結資料庫,系統定義,總共有下列**指定
gcc去那找
:當初在編譯時指定的(
在~gcc/gcc/collect2.c:locatelib()
寫在specs
內的後來用-d -i -l
指定的gcc
環境變數設定
(編譯的時候
)ld.so
的環境變數(這是
run time
的時候)
1.標頭檔案
gcc在編譯時怎麼去尋找所需要的標頭檔案 :
※header file
的搜尋會從
-i開始
※然後找gcc
的環境變數
c_include_path,cplus_include_path,objc_include_path
※再找內定目錄
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.2/i386-linux/include2.
庫檔案cos()
等函式庫的選項要多加
-lm編譯的時候:
※gcc
會去找-l※再找
gcc的環境變數
library_path
※再找內定目錄
/lib /usr/lib /usr/local/lib3.
利用linux
系統上已有的研發庫
(1).
檢視庫檔案提供了哪些呼叫
能用nm
命令自己檢視庫檔案提供了哪些呼叫
(2).
通過標頭檔案檢視函式的定義
wc -l
檢視檔案的內容
gcc
預編譯技術首先將標頭檔案解析成臨時檔案,在某個源**檔案需要時,再讀入
該臨時檔案。可以用g++
單獨編譯乙個標頭檔案
。編譯階段主要進行源**的完整性檢測,然後將**翻譯成組合語言,
而彙編階段主要進行彙編**向目標**的翻譯。
4.函式庫分為:
靜態庫:後輟一般為.a
。動態庫:共享庫,.so(share object),
一般格式為
*.so.x,x
為版本。
1 1 GCC編譯過程
作用 展開巨集,把頭檔案內容解發布來生成 i檔案 a 將 include的內容解發布來 b 處理條件預處理命令,比如 if ifdef elif else endif等 c 刪除所有的注釋 d 展開巨集定義 gcc 原始檔 c e o i gcc vol.c e o vol.i gcc 編譯器 vo...
gcc的基本使用
gcc編譯器工作流程 preprocess 預處理 compilation 編譯 assembly 彙編 link 鏈結 gcc最基本的使用方法 gcc 選項 要編譯的檔案 例 gcc hello.c 會生成a.out檔案。gcc的選項 o 檔名 定義生成檔案的名字,例 gcc hello.c o ...
gcc基本使用
centos 版本的可直接執行指令 yum install gcc gnu cc 通常稱為gcc 是gnu羨專案的編譯器,它能夠編譯c c 語言編寫程式。gcc是區分拓展名的,c檔案,gcc就會用c語言的規範去編譯,cpp的檔案,gcc就會用c 語言的規範去編譯。引數含義 o filename 輸出...