静态库与动态库的创建与使用

来源:互联网 发布:yy动态头像源码 编辑:程序博客网 时间:2024/06/09 14:33

静态库的制作

使用gcc -c file1.c 编译所有c文件

  gcc -c file1.c  gcc -c file2.c  ....  gcc -c fileN.c  ar -rcs  libname.a   file1.o  file2.o  ... fileN.o

然后使用ar -rcs libname.a file1.o file2.o … fileN.o将编译后的.o文件打包成静态库。

/*将link.c制作成静态库*/[nick@XQLY test]$ lslinker.c  linker.h  main.c/*编译linker.c*/[nick@XQLY test]$ gcc -c linker.c [nick@XQLY test]$ lslinker.c  linker.h  linker.o  main.c/*生成静态库libmyfristlib.a  */[nick@XQLY test]$ ar -rcs libmyfristlib.a linker.o[nick@XQLY test]$ lslibmyfristlib.a  linker.c  linker.h  linker.o  main.c

静态库的使用

使用命令gcc main.c -L. -lmyfristlib -I. -o link.out
-L(大写L)指定路径
-l(小写L)指定库,后只用跟库名name.
-I(大写I)指定头文件路径
-o(小写o)指定输出文件名

[nick@XQLY test]$ lslibmyfristlib.a  linker.h  main.c[nick@XQLY test]$ gcc main.c -L. -lmyfristlib -I. -o link.out[nick@XQLY test]$ lslibmyfristlib.a  linker.h link.out  main.c[nick@XQLY test]$ ./link.outadd[10]add[9]add[8]add[7]add[6]add[5]add[4]add[3]add[2]add[1]

动态库的制作

使用gcc -shared -fPIC -o libname.so *.c命令

[nick@XQLY test]$ lslinker.c  linker.h  main.c/*生成动态库libmyfristlib.so  */[nick@XQLY test]$ gcc -shared -fPIC -o libmyfirstlib.so linker.c[nick@XQLY test]$ lslibmyfirstlib.so  linker.c  linker.h  main.c

动态库的使用

编译同静态库命令

[nick@XQLY test]$ gcc main.c -o link.out -L.  -lmyfirstlib -I.[nick@XQLY test]$ lslibmyfirstlib.so  linker.h  link.out  main.c[nick@XQLY test]$ ./link.out./link.out: error while loading shared libraries: libmyfirstlib.so: cannot open shared object file: No such file or directory

但这里出现了一个错误,这个错误是因为我们自己建的动态库不在系统动态库路径里。可以通过拷贝到系统路径里后执行,或者通过修改环境变量LD_LIBRARY_PATH来通知系统。

[nick@XQLY test]$ export LD_LIBRARY_PATH=.[nick@XQLY test]$ ./link.outadd[10]add[9]add[8]add[7]add[6]add[5]add[4]add[3]add[2]add[1]

完。

原创粉丝点击