Linux静态库与动态库制作过程
文件:tobigchar.c mian.c tobigchar.h
//tobigchar.c char tos() { char ch; ch = getchar(); if(ch >= 'a' && ch <= 'z') ch = ch - 32; else if(ch >= 'A' && ch <= 'Z') ch = ch + 32; return ch; }
//main.c
#include<stdio.h> #include"tobigchar.h" int main() { printf("%c\n",tos()); }
//tobigchar.h #ifndef _H_ #define _H_ int tos(); #endif
静态库:
生成目标文件:
gcc -c -o tobigchar.o tobigchar.c
生成静态库:
ar rcs libtobigchar.a tobigchar.o
编译程序:
gcc -I./ -L./ main.c -ltobigchar
运行程序:
./a.out
动态库:
生成目标文件:
gcc -c -fpic -o tobigchar.o tobigchar.c
生产动态库:
gcc -shared -o libtobigchar.so tobigchar.o
编译程序:
gcc -I./ -L./ main.c -ltobigchar
设置动态库环境变量:
export LD_LIBRARY_PATH=/mnt/hgfs/Linux/Linuxshare/20190119/code:$LD_LIBRARY_PATH //pwd打印出当前文件的绝对路径
运行程序:
./a.out
为什么要做库?
在做项目的时候,一般都不是一个人可以完成的,需要团队合作,每个人的分工不一样,做底层函数的成员提供一个库,为上层应用提供函数接口就行。
makefile脚本:静态库
CFLAGS=-Wall -O3 OBJS= main.o libtobigchar.a main:$(OBJS) @$(CC) $(CFLAGS) -I./ -L./ $< -o $@ -ltobigchar libtobigchar.a:tobigchar.o @$(AR) rcs $@ $< %.o : %.c @$(CC) -c $< -o $@ clean: @$(RM) a.out *.o *.a *.so
makefile脚本:动态库
OBJS=main.o libtobigchar.so main:$(OBJS) $(CC) -I./ -L./ $< -o $@ -ltobigchar libtobigchar.so:tobigchar.o $(CC) -shared -o $@ $< %.o:%.c $(CC) -c -fpic $< -o $@ clean: $(RM) *.o *.so *.a a.out