靜態庫和動態庫的製作

2021-09-27 11:47:04 字數 3034 閱讀 4556

在現實工作中,要實現**的共享但又不想讓別人知道自己的源**。那我們該怎麼做呢?我們可以利用動態庫來保護自己寫的源**不被別人竊取。

lib目錄檔案

makefile

cc=gcc

#用ar命令對目標檔案歸檔(格式為ar -rcs),生成靜態庫檔案

libtest.a:myalib.o

ar -rcs libtest.a myalib.o

#編譯生成各目標檔案*.o:myalib.o

myalib.o:myalib.c myalib.h

$(cc) -c myalib.c

clean:

rm *.o *.a *~

2.myalib.c

#includevoid test()

3.myalib.h

#ifndef myalib_h

#define myalib_h

#includevoid test();

#endif

test的目錄檔案

main.c

int main()

2.makefile

cc = gcc

staticlibtest:main.o

$(cc) -o staticlibtest -l ../lib main.o -ltest

main.o:main.c

$(cc) -i ../lib -c main.c

clean:

rm *.o staticlibtest *~

執行make得到庫檔案

執行可執行檔案

**如下:

/************************ libinte***ce.h *************************/

#ifndef libinte***ce_h

#define libinte***ce_h

typedef struct

date_type_t;

typedef struct

time_type_t;

int gettime(time_type_t *t);

int example(int select);

int getdate(date_type_t *d);

#endif

/********************* makefile ********************/

cc=gcc

objs=gettime.c example.c getdate.c

real_name=libinte***ce.so.1.0

so_name=libinte***ce.so.1

link_name=libinte***ce.so

lib_dir=/usr/lib

libinte***ce.so.1.0:

$(cc) -fpic -shared -wl,-soname,$(so_name) -o $(real_name) $(objs) -i$(inc_dir)

install:

ln -s $(real_name) $(link_name)

rm -f $(lib_dir)/$(so_name)

ln -s $(real_name) $(lib_dir)/$(so_name)

rm -f $(lib_dir)/$(link_name)

cp $(real_name) $(lib_dir)

clean:

rm *.o *.so *.so.*.* *~

/***************************** main *********************************/

#include #include #include "../libinte***ce.h"

int main()

/*********************test裡面的makefile*******************/

cc = gcc

#程式執行時共享庫的查詢路徑

lib_dir = /usr/lib

#庫(linker-name)檔案、庫標頭檔案編譯時路徑

# -l 目錄作為第乙個尋找庫檔案(linker-name)的目錄-l$(inc_dir)

# -lworld 表示在-l$(inc_dir)下尋找 libworld.so 動態庫檔案(linker-name)

# gcc 加入鏈結引數「-wl,-rpath」指定動態庫(so-name,real-name)執行時搜尋路徑

main: main.o

$(cc) -wl,-rpath,$(lib_dir) main.o -o main -l$(inc_dir) -linte***ce

# -i 目錄作為第乙個尋找標頭檔案的目錄

main.o:

$(cc) -c main.c -o main.o -i$(inc_dir)

clean:

rm *.o *~ main

執行makefile

注意:一定要改正makefile中的路徑

製作靜態庫和動態庫

製作靜態庫的方法 1 把 編譯為目標檔案形式 gcc c liberr.c o liberr.o 2 使用工具ar建立乙個存檔檔案 ar rcs liberr.a liberr.o gcc errtest.c o errtest static l.lerr 製作動態庫的方法 1 首先編譯目標檔案 g...

靜態庫和動態庫製作

1.什麼是庫檔案?儲存函式和變數 倉庫 特點 儲存的函式變數只能使用但不能看到其它實現。靜態庫 a 在編譯階段載入 將庫檔案 載入到原始檔 動態庫 so 在執行時載入。2.生成的可執行檔案存在的區別 優缺點 1 使用靜態庫生成的可執行檔案大於動態庫 程式執行占用記憶體較多 2 使用靜態庫生成的可執行...

Linux靜態庫和動態庫的製作

1.什麼是庫檔案?儲存函式和變數 特點 儲存的函式與變數只能使用但不能看到其實現 2.linux庫檔案 靜態庫 在編譯階段載入 將庫檔案的 載入到原始檔 動態庫 在執行時載入 3.生成可執行檔案存在的區別 優缺點 1 使用靜態庫生成的可執行檔案大於動態庫生成的可執行檔案 程式占用的記憶體較多 2 使...