使用GCC編譯的常用功能

2021-08-02 20:05:05 字數 3705 閱讀 4045

**

(1)gcc對多個分立原始檔的編譯(-c, -o)

$ls

test.h test.c main.c

$gcc -c test.c -o test.o #生成中間檔案test.o

$gcc -c main.c -o main.o #生成中間檔案main.o

$gcc test.o main.o -o main #生成最終的main可執行檔案

(2)gcc動態鏈結庫的編譯(-shared, -fpic, -l)

$ls

test.h test.c main.c

$gcc -c test.c -o #生成中間檔案test.o

$gcc -shared -fpic test.o -o libtest.so #利用中間檔案生成動態庫

$gcc main.c -l. -ltest -o main #鏈結動態庫生成最終的main可執行檔案

#如果將libtest.so生成放入./lib/下,則

$gcc -shared -fpic test.o -o ./lib/libtest.so #利用中間檔案生成動態庫

$gcc main.c -l ./lib -ltest -o main #鏈結動態庫生成最終的main可執行檔案

#注意:

-l. 表示為當前目錄

-fpic引數,作用於編譯階段,告訴編譯器產生與位置無關**(position-independent code),則產生的**中,沒有絕對位址,全部使用相對位址,故而**可以被載入器載入到記憶體的任意位置,都可以正確的執行。這正是共享庫所要求的,共享庫被載入時,在記憶體的位置不是固定的。

(3)動態鏈結庫的使用

1)隱式使用

#1 用ln將需要的so檔案鏈結到/usr/lib或者/lib這兩個預設的目錄下邊

$ln -s /usr/test/lib/*.so /usr/lib

$ldconfig

#2 修改ld_library_path

$export ld_library_path=/usr/test/lib :$ld_library_path

$ldconfig

#3 修改/etc/ld.so.conf

#@1 使用vim新增

$vim

/etc/ld.so.conf

#手動新增 /usr/test/lib 一行到檔案中

$ldconfig

#@2 使用管道追加

$echo "/usr/test/lib"

>> /etc/ld.so.conf

$ldconfig

2)顯式使用

在程式中顯式呼叫dlopen, dlsym, dlclose系列函式(#include )來實現,這裡不詳述。

(4)gcc靜態庫的編譯和使用(-static, ar)

$ls

test.h test.c main.c

$gcc -c test.c -o #生成中間檔案test.o

$ar crv libtest.a test.o #生成靜態庫libtest.a

a - test.o

$gcc main.c libtest.a -o main #鏈結靜態庫生成最終的main可執行檔案

($gcc main.c -static -ltest -o main) #優先選擇靜態庫

#如果將libtest.a生成放入./lib/下,則

$ar crv ./lib/libtest.a test.o #生成靜態庫libtest.a

a - test.o

$gcc main.c ./lib/libtest.a -o main #鏈結靜態庫生成最終的main可執行檔案

($gcc main.c -l ./lib -static -ltest -o main) #優先選擇靜態庫

#注意:

ar命令可以用來建立、修改庫。

c:建立乙個庫。不管庫是否存在,都將建立。

r:在庫中插入模組(替換)。當插入的模組名已經在庫中存在,則替換同名的模組。

v:該選項用來顯示執行操作選項的附加資訊。

(5)編譯警告選項同時將警告記錄輸出到檔案(-wall和2,-werror,-pedantic)

#以程式中存在乙個沒有使用到的變數b為例

$lstest.h test.c main.c

$gcc -c test.c -o test.o -wall 2> debug.txt

c:4: warning: unused variable 'b'

$cat

debug.txt

c:4: warning: unused variable 'b'

$gcc -werror -c test.c -o test.o

#pedantic選項能夠幫助程式設計師發現一些不符合 ansi/iso c標準的**

$gcc -pedantic -c test.c -o test.o

(6)指定標頭檔案的路徑(-i)

$gcc –c –i /usr/dev/mysql/include test.c –o test.o
(7)彙編(-e,-s)

#預處理,將標頭檔案等內容插入到test.c中

$gcc -e test.c -o test.i($gcc -e test.c)

#生成彙編**

$gcc -s test.i -o test.s

#通過彙編碼生成目標檔案

$gcc -c test.s -o test.o

(8)調式(-g)

$gcc -c test.s -o test.o
其他

gcc 命令的常用選項

選項 解釋

-ansi 只支援 ansi 標準的 c 語法。這一選項將禁止 gnu c 的某些特色,

-c 只編譯並生成目標檔案。

-dmacro 以字串「1」定義 macro 巨集。

-dmacro=defn 以字串「defn」定義 macro 巨集。

-e 只執行 c 預編譯器。

-g 生成除錯資訊。gnu 偵錯程式可利用該資訊。

-idirectory 指定額外的標頭檔案搜尋路徑directory。

-ldirectory 指定額外的函式庫搜尋路徑directory。

-llibrary 連線時搜尋指定的函式庫library。

-m486 針對 486 進行**優化。

-o file 生成指定的輸出檔案。用在生成可執行檔案時。

-o0 不進行優化處理。

-o 或 -o1 優化生成**。

-o2 進一步優化。

-o3 比 -o2 更進一步優化,包括 inline 函式。

-shared 生成共享目標檔案。通常用在建立共享庫時。

-static 禁止使用共享連線。

-umacro 取消對 macro 巨集的定義。

-w 不生成任何警告資訊。

-wall 生成所有警告資訊。

word 的使用(六) 常用功能

word的使用 word的使用 二 word的使用 三 word 的使用 四 word 的使用 五 word 的使用 六 word 的使用 七 快捷鍵 word 2010插入超連結 使用相對路徑 word2007怎樣從任意頁開始設定頁碼 插入 頁碼 設定頁碼格式 設定起始頁碼,然後插入頁碼 在空白頁...

js jq 的常用功能

js的新增屬性和移除屬性 新增 document.getelementbyid down setattribute disabled true 移除 document.getelementbyid up removeattribute disabled jq的新增屬性和移除屬性 新增 up attr...

idea的常用功能

快捷鍵的使用常常能起到事半功倍的效果,話不多說,看下面常用的快捷方式吧。熟練使用絕對大大提高開發速度。一,搜素快捷鍵 1.ctrl n搜素類,相當於eclipse的ctrl shift r 2.ctrl shift n 搜尋所有檔案,包含類,xml,js,web 等 3.ctrl h 檢視類的繼承關...