Linux平台靜態庫 動態庫的製作與使用

2021-10-06 10:13:42 字數 1674 閱讀 7146

一、靜態庫

#當前目錄結構

├── code

│ ├── include

│ │ └── head.h

│ ├── library

│ │ ├── dynamic_library

│ │ └── static_library

│ └── src

│ ├── c++11_thread

│ ├── createlib

│ │ ├── add.c

│ │ ├── div.c

│ │ ├── main.c

│ │ ├── mult.c

│ │ ├── sub.c

#include目錄存放標頭檔案

#src目錄存放原始檔

#library存放動態庫(dynamic_library)和靜態庫(static_library)

#將createlib下的原始檔生成靜態庫,並存放在static_library中

#先將.c檔案編譯成.o檔案,-i 指定頭檔案目錄

gcc -c add.c div.c mult.c sub.c -i ../../include

#然後使用ar將.o檔案打包成靜態庫檔案

ar rcs ../../library/static_library/libcalc.a *.o

-r:替換

-c:建立

-s:索引

#靜態庫命名規則為lib***.a,其中lib和.a分別為靜態庫的字首和字尾

#靜態庫的使用,-l指定靜態庫查詢路徑,-l指定靜態庫名(去除字首和字尾)

gcc main.c -l ~/code/library/static_library -l calc -i ~/code/include/

二、動態庫

#先生成與位置無關的.o檔案,-fpic使用相對位址記錄**的位置

gcc -c -fpic add.c div.c mult.c sub.c -i ../../include

#生成動態庫,動態庫命名規則lib***.so,其中lib和.so分別為動態庫的字首和字尾

gcc -shared *.o -o ../../library/static_library/libcalc.so

#靜態庫的使用

gcc main.c -l ~/code/library/dynamic_library/ -l calc -i ~/code/include/

執行生成的a.out可能會出現動態庫找不到的問題,解決方法:

#/home/lcx/code/library/dynamic_library是動態庫的絕對路徑

export ld_library_path=

$ld_library_path:/home/lcx/code/library/dynamic_library

#/home/lcx/code/library/dynamic_library是動態庫的絕對路徑

export ld_library_path=

$ld_library_path:/home/lcx/code/library/dynamic_library

linux 靜態庫 動態庫

1.概念和區別 靜態庫就是在編譯過程中一些目標檔案的集合。靜態庫在程式鏈結的時候使用,鏈結器會將程式中使用到函式的 從庫檔案中拷貝到應用程式中。一旦鏈結完成,在執行程式的時候就不需要靜態庫了。由於每個使用靜態庫的應用程式都需要拷貝所用函式的 所以靜態鏈結的檔案會比較大。相對於靜態函式庫,動態函式庫在...

linux 靜態庫 動態庫

linux支援兩種庫的型別 靜態庫和動態庫 共享庫 1.linux靜態庫和動態庫的命名規則 靜態函式庫 lib a 動態函式庫 lib so 這些庫檔案都是由 o檔案生成的 動態庫 程式執行過程中進行連線。可執行檔案 庫檔案 靜態庫 編譯時進行連線。庫檔案 的複製貼上過程。程式執行時先檢查依賴的庫檔...

Linux動態庫,靜態庫

1.庫是什麼?庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。就是將源 轉化為二進位制格式的源 相當於進行了加密,別人可以使用庫,但是看不到庫中的內容。2.靜態庫 靜態函式庫時在程式執行之前 編譯 就加入到目標程式中去了 linux中命名系統中靜態庫庫的規則 靜態庫檔名的命名方式是 l...