C—动态库与静态库
库: 二进制代码的封装
1.能够把自己的代码公开给别人使用,但是不提供源码
动态库: .dll(dynamic link library) .so
运行的时候加载
生成动态库:
1.gcc -shared -fpic -o libwtf.so wtf.c XXX.c
·-shared: 动态库
· wtf.c:源程序
· libXXX.so: 生成文件库的名字
2.把库和头文件给需要的人
3.使用动态库
gcc main.c -o main -lwtf -L.
-lwtf:指定使用wtf这个库(库的全名 libwtf.so)
-L. :指定编译时库的搜索路径在.目录下
-I/mnt/hgfs/02/动态库 :指定头文件所在的路径为:/mnt/hgfs/02/动态
4.运行程序
./main: error while loading shared libraries:
libwtf.so: cannot open shared object file: No such file or directory
错误理由:库是存在的,但是找不到
解决方案:指定运行程序时库的搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/…
静态库:
.a编译的时候加载
手动静态库:
1.把源码编译生成.o文件
gcc -c XX.c -o XX.o
2.把所有的.o文件打包生成静态库
ar -rc libXXX.a XXX.o XXX.o
3.把库和头文件给需要的人
4.使用静态库
gcc main.c -o main -lwtf -L.
自动静态库:
增加 -static项,会自动打包好静态库到编译的main中,main会很大,占空间,但是很方面
gcc main.c -o main -static