动静态库的简单介绍和使用

linux下文件的类型是不依赖于其后缀名的,但一般来讲:
.o,是目标文件,相当于windows中的.obj文件
.so为共享库,是shared object,用于动态连接的,和dll差不多
.a为静态库,是好多个.o合在一起,用于静态连接




创建静态库:
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -c hello.c   /*生成.o的目标文件*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# ar -cr libhello.a hello.o /*使用目标文件生成libhello.a的静态库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.a  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc main.c -o main -L. -lhello /*编译的时候加上libxxx.a的静态库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.a  main  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# ./main  /*可以运行成功*/
hello world
root@ubuntu:/home/wangyiyf2/test/libtest# rm libhello.a /*删掉libhello.a的静态库也可以运行*/ 
root@ubuntu:/home/wangyiyf2/test/libtest# ./main
hello world


注1:-cr:-c表示create,-r表示replace
注2:-L.表示lib,"."表示静态库在本目录下寻找。


创建动态库:
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -c -fPIC hello.c   /*产生.o的目标文件*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -shared -fPIC hello.o -o libhello.so  /*用目标文件生成.so的共享库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.so  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# cp libhello.so /lib  /*把共享库复制到/lib 或/usr/lib目录下*/
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -o main main.c -L. -lhello /*编译main函数,要包含共享库libxxx.so*/
root@ubuntu:/home/wangyiyf2/test/libtest# ./main        /*运行成功*/
hello world
root@ubuntu:/home/wangyiyf2/test/libtest# ./main        /*删掉/lib下的目标共享库的话运行失败*/
./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory


注3:-L. -lhello :-l表示lib,hello是libhello.so的缩写,代表libhello.so   libxxx.so

你可能感兴趣的:(windows,object,ubuntu,gcc,File,dll)