乙個c語言程式從編寫完成到執行需要經歷預處理(生成.i)->編譯(生成.s)->彙編(生成.o)->鏈結(生成可執行檔案)幾個步驟,如下圖所示。
這裡推薦一篇講解的比較全面的部落格——gcc常用引數詳解。
我們最常用的gcc編譯選項主要有以下幾個:
以下是幾篇講的比較好的部落格:
靜態鏈結就是在執行之前講已經編譯好的靜態庫載入鏈結合併到程式中,而動態鏈結則是在程式執行的時候動態載入鏈結庫(當碰到記憶體中已經載入進來該庫的時候,只進行虛擬位址空間的對映,這樣可以提公升記憶體利用率)。其實#include只是定義了printf這些函式的函式原型,具體的**要在鏈結的過程中才會被載入進來。
#include
#include
intmain
(int argc,
char
*ar**)
res =
unsgn_pow
(x, y)
;printf
("%u ^ %u = %u\n"
, x, y, res)
;return0;
}
unsigned
long
long
unsgn_pow
(unsigned
int x,
unsigned
int y)
else
if(y ==1)
else
return res;
}
Linux下製作動態庫與靜態庫
靜態函式庫 1.這類庫的名字一般是lib a 2.利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都會被整合進目標 中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進可執行檔案了。當然這也會成為他的缺點,因為如果靜態函式庫改變了,那麼你的程...
Linux下製作靜態庫和動態庫
所謂庫檔案,就是一堆函式的集合。一堆函式原始碼的集合 c 一堆二進位制函式 的集合 so 使用者可以呼叫庫裡面的函式,但是沒有辦法看到函式的實現過程。在linux裡面,庫有兩種,一種是靜態庫 lib x.a 另外一種是動態庫 共享庫 lib x.so 例子 libabc.so.0.8 lib 庫的字...
Linux下動態庫和靜態庫的製作及使用
在實際的開發過程中,編寫程式往往都需要依賴很多基礎的底層庫,比方說平時用的較多的標準c庫,數學庫等等 我們會頻繁的使用這些庫里的函式,這些函式大多數都是前人為我們寫好的,所以值得慶幸的是我們的工作不必從零開始,我們要做的只是在恰當的位置呼叫合適的庫函式去實現相應的功能,充分利用前人的勞動成果,就是 ...