(1)
靜態庫:是在可執行程式執行前就已經加入到執行**中,成為執行程式的一部分來執行的。
(2) 動態庫:就是在執行程式啟動時載入到執行程式中,可以被多個執行程式共享使用。
靜態庫是一些目標**的集合。
linux
環境下的靜態庫目標檔案一般以
.a作為目標檔案。linux 環境下使用ar 命令建立乙個靜態庫的有點在於使用簡單,編譯快速。靜態庫在應用程式生成時,已經編譯成為可重定位的目標檔案,因此不必再編譯。
建立靜態庫的步驟:
(1)編輯靜態庫函式**檔案:static_lib.c
int add(int a, int b)
(2) 在shell 中編譯該原始檔,生成乙個可重定位的目標檔案如下:
gcc
–c static_lib.c
使用ar 工具建立乙個靜態庫,或者將目標檔案加入到乙個已經存在的靜態庫中。其使用方法如下:
(3)現在需要使用剛生成的static_lib.o 目標檔案建立乙個靜態庫static_lib.a ,其執行命令如下:
ar rcs static_lib.a static_lib.o
ar rcs
靜態庫名
目標檔案
1 目標檔案
2 ……
目標檔案n
該命令表示將目標檔案
1~n加入到指定的靜態庫中。如果該靜態庫不存在,則建立靜態庫
,並且將庫檔案的副檔名命名為
.a,其中
ar工具的引數
rcs起了至關重要的作用。這
3個引數分別表示:把列表中的目標檔案加入到靜態庫中(引數
r)若指定的靜態庫不存在,則建立該庫檔案(引數
c)最後更新靜態庫檔案的索引,使之包含新加入的目標檔案檔案的內容(引數s)。
使用靜態庫
為了使應用程式可以正確引用該庫中的全域性符號,需要製作乙個包含該靜態庫中全域性符號宣告的標頭檔案。這個標頭檔案可以包含在應用程式的標頭檔案中,這樣就可以
引用該靜態庫的全域性符號了。 (
1)在static_lib.h
靜態庫中全域性變數和函式的宣告
extern int add(int a, int b); (
2)使用庫的應用程式
#include
#include "static_lib.h"
int main(void)
(4) 使用
gcc命令生成相應的應用程式
動態庫的生成方法跟靜態的不一樣,呼叫都一樣。
(1)生成動態庫檔案:gcc -shared -fpic share_lib.so share_lib.c
由於動態庫可以被多個程序共享載入,所以需要生成位置無關的目標檔案。這是需要使用gcc編譯器的-fpic選項,該選項用於生成位置無關的**。除了需要-fpic選項外,還需要使用-shared選項,該選項將位置無關的**製作為動態庫。
gcc -shared -fpic -o share_lib.so share_lib.c
靜態庫與動態庫理解
所謂靜態庫,就是在靜態編譯時由編譯器到指定目錄尋找並且進行鏈結,一旦鏈結完成,最終的可執行程式中就包含了該庫檔案中的所有有用資訊,包括 段 資料段等。所謂 動態庫,就是在應用程式執行時,由作業系統根據應用程式的請求,動態到指定目錄下尋找並裝載入記憶體中,同時需要進行位址重定向。win32平台下,靜態...
解壓靜態庫 a檔案
目錄 分離arch 抽離a檔案的object 獲取檔案 首先先準備乙個靜態庫.a檔案,比如叫staticlibrary.a,放在桌面的test目錄裡。首先先file一下staticlibrary.a,看一下該檔案包含幾種arch。cd desktop test test ls staticlibra...
解壓靜態庫 a檔案
1.準備乙個.a的靜態庫檔案 test.a 將其放在桌面新建立的test資料夾中 2.進入終端 a.進去該資料夾目錄 cd desktop test b.檢視.a檔案包含幾種arch file test.a c.由於抽離object的時候必須是要單一的庫,所以抽出armv7並命名為v7.a 目錄會多...