静态库&动态库的生成
1 静态库生成
gcc -c hello.c //生成静态的hello.o
ar -crv libhello.a hello.o //生成静态库
gcc -o main.c libhello.a //生成连接静态库的执行文件
#####2 动态库的生成
gcc -fPIC -shared -o libhello.so hello.c
gcc main.c -o main -L. -lhello
运行
./main
会得到以下的错误提示。
./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory
执行
export LD_LIBRARY_PATH=. //因为不想改变系统环境变量,可临时设置一个链接库路径
./main //运行成功
3 makefile让工作自动化
编写makefile,内容如下:
.PHONY: build test clean
build: libmax.so
libmax.so: max.o
gcc -o $@ -shared $<
max.o: max.c
gcc -c -fPIC $<
test: a.out
a.out: test.c libmax.so
gcc test.c -L. -lmax
LD_LIBRARY_PATH=. ./a.out
clean:
rm -f *.o *.so a.out
make build
就会生成libmax.so
, make test
就会生成a.out
并执行,make clean
会清理编译和测试结果。