1,编写库相关文件
sd.c:
int sumab(int a, int b){
return a+b;
}
sd.h
int sumab(int, int);
Makefile
sda:
gcc -c sd.c
ar rs libsd.a sd.o
gcc test.c libsd.a -o test
rm sd.o
sdd:
gcc -c -fpic sd.c
gcc -shared sd.o -o libsd.so
gcc test.c -lsd -L. -o test
rm sd.o
clean:
rm test libsd.so libsd.a
run:
LD_LIBRARY_PATH=$(shell pwd) ./test
2.编译与运行:
静态库编译:
make sda
动态库编译:
make sdd
运行:
make run
删除库和测试文件:
make clean
PS:
https://www.cnblogs.com/fnlingnzb-learner/p/8119729.html
还有一种情况是静态库调用了动态库的函数,但并没有将动态库内函数拷贝到自己库里,所以编译应用时,会提示有些动态库内的函数未定义:
gcc test.c ../lib/libzlog.a -I ../incl/ -L ../lib/ -o ../bin/main -pthread
这是一个zlog静态库饿应用,test.c使用zlog,但zlog用到pthread动态库,所以编译语句变一下。 ../incl/内包含zlog.h头文件。