lib

静态库&动态库的生成

库生成方式

Posted by VK on November 2, 2019

静态库&动态库的生成

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.somake test就会生成a.out并执行,make clean会清理编译和测试结果。