一、靜態庫
#當前目錄結構
├── 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...