靜態庫的建立和使用
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_lib下面存放靜態庫#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
src下面存放原始碼
add.c
#include "head.h"div.cint add(int a, int b)
#include "head.h"mul.cint div(int a, int b)
#include "head.h"sub.cint mul(int a, int b)
#include "head.h"main.c是程式執行入口int sub(int a, int b)
#include <步驟一:生成對應的.o檔案【.c --> .o】stdio
.h>
#include "head.h"
int main(void)
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 mysumiinclude 指定標頭檔案
-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 所...