靜態庫檔案的理解

2021-09-30 07:30:27 字數 1513 閱讀 3386

(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 目錄會多...