11 GCC的基本使用

2021-09-08 01:55:47 字數 2824 閱讀 2606

一.

常用編譯命令選項   

假設源程式檔名為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 輸出...