Linux下程式設計工具的使用 2 GCC編譯器

2021-08-29 16:50:01 字數 2271 閱讀 2655

對於gun編譯器來說,程式的編譯要經歷預處理、編譯、彙編、連線四個階段,如下圖所示:

從功能上分,預處理、編譯、彙編是三個不同的階段,但gcc的實際操作上,它可以把這三個步驟合併為乙個步驟來執行。下面我們以c語言為例來談一下不同階段的輸入和輸出情況。

在預處理階段,輸入的是c語言的原始檔, 通常為*.c。它們通常帶有.h之類標頭檔案的包含檔案。這個階段主要處理原始檔中的#ifdef、 #include和#define命令。該階段會生成乙個中間檔案*.i,但實際工作中通常不用專門生成這種檔案,因為基本上用不到;若非要生成這種檔案 不可,可以利用下面的示例命令:

gcc -e  test.c -o test.i

在編譯階段,輸入的是中間檔案*.i,編譯後生成組合語言檔案*.s 。這個階段對應的gcc命令如下所示:

gcc -s test.i -o test.s

在彙編階段,將輸入的彙編檔案*.s轉換成機器語言*.o。這個階段對應的gcc命令如下所示:

gcc -c test.s -o test.o

最後,在連線階段將輸入的機器**檔案*.s(與其它的機器**檔案和庫檔案)匯集成乙個可執行的二進位制**檔案。這一步驟,可以利用下面的示例命令完成:

gcc test.o -o test

編譯:  gcc -c hello_gnome.c  -o hello_gnome.o -g -wall `gnome-config --cflags gnome gnomeui`

連線: gcc hello_gnome.o -o hello_gnome `gnome-config --libs gnome gnomeui`

編譯連線: gcc hello_gnome.c -o hello_gnome -g -wall `gnome-config --cflags gnome gnomeui` `gnome-config --libs gnome gnomeui`

-i/usr/include/gnome-1.0 -dneed_gnomesupport_h -i/usr/lib/gnome-libs/include -i/usr/include/gtk-1.2 -i/usr/include/glib-1.2 -i/usr/lib/glib/include

-rdynamic -l/usr/lib -lgnomeui -lart_lgpl -lgdk_imlib -lsm -lice -lgtk -lgdk -lgmodule -ldl -lxi -lxext -lx11 -lgnome -lgnomesupport -lesd -laudiofile -lm -ldb-4 -lglib

-g                  : 編譯除錯資訊 

-wall            : 產生所有警告資訊

-i                   : 標頭檔案查詢路徑

-rdynamic   : 動態連線庫檔案

-l                  : 庫檔案查詢路徑

-l                   : 包含的庫檔案,例如,-lgtk  就會被解釋為 /usr/lib/libgtk.a

path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

(系統級別)存放啟動系統時用到的二進位制檔案

/bin                                     

/sbin                                   : 只有系統管理員(super user)才能執行的程式

(使用者級別)用於存放使用者使用的標準程式

/usr/bin                               

/usr/sbin                             : 只有系統管理員(super user)才能執行的程式

存放特定軟體安裝的程式

/usr/local/bin

/usr/local/sbin                   : 只有系統管理員(super user)才能執行的程式

庫路徑

/lib

/usr/lib

/usr/local/lib

標頭檔案路徑

/usr/inlcude

/usr/include/sys

/usr/include/linux

ORACLE 使用超過2G記憶體

在http blog.chinaunix.net u1 50863 showart 411877.html海鷗大哥的部落格上看見這個帖子,覺得很有用。保留下來日後仔細研究。他人的成果不敢據為己有,特此宣告下。伺服器 hpdl 580g 2 雙cpu 6g記憶體 win2003 enterprise ...

linux下操作大於2G檔案

1 包含所有標頭檔案以前,先定義這些巨集 ifndef use file offset64 define use file offset64 endif ifndef use largefile64 define use largefile64 endif ifndef largefile64 so...

linux解壓超過2G大檔案

最近資料伺服器出現問題 通過exp命令備份 資料達到14g 壓縮命令 zip r 20130314.zip 20130314.dmp ls l 檢視檔案大小 壓縮zip格式也有3.2g rw r r 1 root root 3826207807 03 28 22 14 20130314.zip 新準...