linux動態鏈結庫編譯執行方法

2021-07-15 04:20:05 字數 879 閱讀 7865

動態鏈結庫不是linux獨有的特性,在windows下面也存在這樣的特性。

一般來說,windows下面的動態連線庫是以*.dll作為結尾的,而linux下面的動態連線庫是以*.so結尾的。

和靜態鏈結庫相比,動態連線庫可以共享記憶體資源,這樣可以減少記憶體消耗。

另外,動態連線是需要經過作業系統載入器的幫助才能被普通執行檔案發現的,

所以動態連線庫可以減少鏈結的次數。有了這個特點,我們就不難發現為什麼很多軟體的補丁其實都是以動態庫發布的。

那麼,在linux上動態庫是怎麼生成的呢?

#include "test.h"  

int add(int a, int b)  

頭檔案格式,

#ifndef  _test_h  

#define  _test_h  

int add(int a, int b);  

#endif  

此時如果我們想要生成動態庫,要做的工作其實非常簡單,輸入gcc -shared -fpic -o libtest.so test.c即可。回車後輸入ls,

我們就可以發現當前目錄下面出現了libtest.so檔案。

#include

#include "test.h"  

int main()  

在上面的**當中,我們發現使用到了add函式,那麼此時如何才能生成乙個執行檔案呢?也很簡單,輸入gcc hello.c -o  hello ./libtest.so。

然後輸入./hello,此時可以驗證一下執行檔案執行是否正確。在編寫靜態庫的時候,

我說過靜態庫是彙編鏈結到執行檔案當中的,而動態庫不會。朋友們可以做個小實驗,刪除libtest.so,

然後輸入./hello。此時大家可以看看系統有沒有錯誤返回?

Linux 編譯靜態鏈結庫與動態鏈結庫的方法

hello.c include int main int argc,char argv 1 編譯生成可執行檔案 gcc o test hello.c 2 編譯生成目標檔案 gcc c o test.o hello.c string.c define endstring 0 int strlen ch...

linux 編譯靜態鏈結庫和動態鏈結庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...

GCC 編譯使用動態鏈結庫和靜態鏈結庫的方法

1 庫的分類 根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的 好像是廢話,但事實就是這樣 所以生成的可執行檔案就不受庫的影響了,即使庫被刪除了,程式依然可以成功執行。有別於靜態庫,動態庫的鏈結是在程式執行的時候被鏈結的。所以,即使程式編譯完,庫仍須保留在系統上,以供程式執行...