1.什么是库:
在开发的时候,不想让人看到源码,但别人又要用你的东西,那么就要把你所写的东西打包变成库。
2.静态库
静态函数库时在程序执行之前(编译)就加入到目标程序中去了
优缺点:
- 优点:
1. 加载速度快
2. 发布程序无需提供静态库,应为已经在app中,移植方便 - 缺点:
1. 链接时完整的拷贝至可执行文件中,被多次使用就会有多次冗余拷贝
2. 更新,部署,发布麻烦
3.动态库
动态函数库是在程序执行的时候动态(临时)由目标程序去调用
- 优点:
1. 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存
2. 程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功 - 缺点:
1. 加载速度比静态库慢
2. 发布程序需要提供依赖的动态库
4.库的制作及使用
- 静态库的制作
xxx.c 文件 生成 xxx.o文件:
gcc xxx.c -c
xxx.o文件 生成静态库文件:
ar -rcs libnew.a xxx.o
生成的静态库文件把头和尾去掉(把 lib 和 .a 去掉)就是库的名称
- 静态库的使用
gcc main.c -lnew -L ./ -o xxx
main.c 是具有主函数的C文件
-l 是C文件要用到的库,库的名字是new
-L是从指定的路径去找库,默认是/usr/lib/
-o生成一个名为 xxx 的执行程序
- 动态库的制作
xxx.c 文件生成动态库文件:
gcc -shared -fpic xxx.c -o libxxx.so
- 动态库的使用
gcc main.c -lnew -L ./ -o xxx
当我们编译完成想执行程序的时候,程序并没有能够执行起来,这是因为动态库是在程序执行的时候动态(临时)由目标程序去调用,所以程序在运行时会去 /usr/lib/ 里面去找这个动态库,但现在在/usr/lib/并没有这个库,为了让程序可以执行起来把我们新建的库复制到/usr/lib/里面去。但我们不可能每一次都把这个库放到/usr/lib/里面去,所以带动态库的程序,运行时可以指定该程序运行时,在LD_LIBRARY_PATH 所指定的路径去找库文件:
export LD_LIBRARY_PATH="/home/pi/TEXT"
xxx)写在一起。
因为这个脚本是没有可执行的权限的所以 要给这个脚本加上可执行的权限:
chmod +x stat.sh