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