靜態庫的製作和使用

2022-03-04 07:37:41 字數 1993 閱讀 9727

靜態庫的建立和使用

1>.命名規則

lib+庫的名字+.a

例子:libmytest.a

2>.製作步驟

a.生成對應的.o檔案【.c --> .o】

b.將生成的.a檔案打包

ar rcs + 靜態庫的名字【libmytest.a】 + 生成的所有的.o

3>.發布和使用靜態庫

a.發布靜態庫

b.標頭檔案

include--存放標頭檔案

lib--存放庫

src--存放原始碼

演示:

include資料夾下面存放head.h【標頭檔案】

#ifndef __head_h_

#define __head_h_

int add(int a, int b);

int sub(int a, int b);

int mul(int a, int b);

int div(int a, int b);

#endif

lib下面存放靜態庫

src下面存放原始碼

add.c   

#include "head.h"

int add(int a, int b)

div.c 

#include "head.h"

int div(int a, int b)

mul.c 

#include "head.h"

int mul(int a, int b)

sub.c  

#include "head.h"

int sub(int a, int b)

main.c是程式執行入口

#include <

stdio

.h>

#include "head.h"

int main(void)

步驟一:生成對應的.o檔案【.c --> .o】

gcc *.c -c -i ../include
生成 add.o   div.o   mul.o   sub.o四個二進位制檔案

預設生成.o檔案

步驟二:將生成的.o檔案打包成靜態庫.a檔案

ar rcs libmycalc.a *.o
將生成的 libmycalc.a 檔案移動到 lib資料夾下

mv libmycalc.a ../lib
步驟三:發布靜態庫

方式一:

gcc main.c lib/libmycalc.a -o sum -iinclude
方式二:

gcc main.c -iinclude -l lib -l mycalc -o mysum
iinclude  指定標頭檔案

-l  指定靜態庫檔案目錄

-l   指定靜態庫檔名稱【摘頭去尾之後的名稱:libmycalc.a-->mycalc】

-o  指定可執行檔名稱

步驟四:使用靜態庫

./mysum
使用nm檢視靜態庫和可執行檔案

nm libmytest.a

nm mysum.out

靜態庫生成可執行檔案詳解:

libmycalc.a靜態庫中包含add.o   div.o   mul.o   sub.o四個二進位制檔案,如果main.c使用了add.o   div.o裡面的函式,生成可執行程式的時候只打包add.o   div.o最終生成mysum這個可執行程式

靜態庫的優缺點

優點:1.發布程式的時候,不需要提供對應的庫

2.載入庫的速度快

缺點:1.庫被打包到應用程式中,導致庫的體積很大

2.庫發生了改變,需要重新編譯程式

linux靜態動態庫製作和使用

本質優點 動態庫共享庫的 是在可執行程式執行時才載入記憶體 1.省空間2.bug修復利於維護3.開發效率 靜態庫靜態庫被鏈結後庫就直接嵌入可執行檔案 1.速度快 linux靜態動態庫製作和使用 動態庫步驟 生成.so文檔案 加 fpic和 shard和檔名需lib so 1.1.gcc fpic o...

靜態庫製作和分析

1 靜態庫的製作 a 建立靜態庫的源 fun.c b 將源 編譯成 o檔案 gcc c fun.c o fun.o gcc c o fun.o fun.cc 將 o檔案生成靜態庫 ar crs libfun.a fun.o ar 是生成靜態庫的命令,crs是選項 arcrs 的諧音是愛人才認識 靜態...

靜態庫和動態庫的製作和使用

linux下的靜態庫為lib a格式的二進位制檔案 目標檔案 對應於windows下的.lib格式的檔案。lib 庫名字 a libmytest.a 則庫名字為mytest。1 生成對應的 o檔案 gcc c c c o 2 將生成的 o檔案打包 ar rcs 靜態庫名稱 libmytest.a 所...