linux下 a so la目標庫區別

2021-08-08 02:42:45 字數 878 閱讀 2147

在linux平台上編譯時,常會遇到目標庫的疑問,有靜態庫也有動態庫,單個理解都不太難,但是對複雜的工程而言,一旦混合到一起去,對整個工程的理解和呼叫,將會造成很大困擾,本文就彙總這幾種常見編譯結果檔案的區別。

linux下編譯,常會遇到字尾為:.o .so .a .la .ko等格式檔案,儘管linux並不以副檔名作為識別檔案格式的唯一依據,但規範約定還是有的,如下:

.o 是目標物件檔案,相當於windows中的.obj檔案

.a 為靜態庫,可以是乙個或多個.o合在一起,用於靜態連線

.la 為libtool生成的共享庫,其實是個配置文件。可以用$file *.la檢視*.la檔案,或用vi來檢視。

.so 為共享庫,類似windows平台的dll檔案

1、建立.o物件檔案

$ gcc -c test.c

生成test.o,跳過鏈結物件,所以不是可執行檔案。

2、建立.a靜態庫檔案

$ ar -r libtest.a test1.o test2.o

3、建立動態庫.so

$ gcc -wall -fpic -shared test1.c test2.c -o libtest.so

$ gcc -wall -fpic -shared -ltest test3.c -o libtest.so

編譯test3.c後並與靜態libtest.a鏈結(缺省會到/usr/lib下找該檔案)生成libtest.so動態庫。

5、生成.la庫

$libtool –mode=link gcc -o libmylib.la -rpath /usr/lib –l/usr/lib –la

libtool將會搜尋libmylib.a檔案,並傳家libmylib.la。

linux下 a so la目標庫區別

linux下.a so la目標庫區別 天緣部落格 linux下.a so la目標庫區別 在linux平台上編譯時,常會遇到目標庫的疑問,有靜態庫也有動態庫,單個理解都不太難,但是對複雜的工程而言,一旦混合到一起去,對整個工程的理解和呼叫,將會造成很大困擾,本文就彙總這幾種常見編譯結果檔案的區別。...

Linux靜態庫和動態庫區別

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

在Linux環境下檢視目標檔案生成過程

include int main 開啟終端,輸入指令 ls。顯示當前資料夾內的所有檔案,然後進入其中的workspace資料夾。如圖 然後在輸入指令 vim hello.c。在spacework裡建立hello.c檔案。之後就會進入編輯器,在編輯器裡可以輸入相應的源 輸入完成後按 esc 鍵,之後再...