一.分文件编程案例
好处:分模块的编程思想
a.功能责任分的清楚
b.方便调试
c.主程序简洁
二.库
https://www.cnblogs.com/sunsky303/p/7731911.html
1.静态库
静态库:是在程序执行前也就是在编译时候就加入到程序中去了
优点: a.运行快(静态库被打包到应用程序中了加载速度快)
b.发布程序时无需提供静态库,因为已经在APP中了,移植方便
缺点:a.链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝
b.更新,部署,发布麻烦
2.动态库
动态库:.在程序执行时动态加载(或者叫做临时调用)到目标程序中去了
优点:
a.链接时不复制,程序运行时由系统加载到内存,供程序调用,系统只加
载一次,多个程序可以共用,节省内存
b..程序升级简单,因为APP中里面没有库的源代码,升级后只要库的 名字不变,函数名以 及参数不变,只是做了优化,就能加载成功
缺点:
a.加载速度比静态库的慢 ;
b.发布程序需要提供动态库
三.库的制作(xxx.c是要打包成库的程序)
静态库:libxxx.a
- gcc xxx.c -c(此时文件夹中多了一个xxx.o文件)
- ar rcs libxxx.a xxx.o xxxx.o(生成libxxx.a静态库)
动态库:libxxx.so
- gcc -shared -fpic xxx.c -o libxxx.so
-shared就是指定生成动态库
-fpic,fpic选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码
四.库的使用(xxx.c是要执行的程序)
静态库:gcc xxx.c -lxxx -L ./ -o xxx(生成xxx是可执行文件)
-l是指定要用的静态库xxx.a
-L告诉gcc编译器从-L制定的路径去找静态库,不指定的话,默认是从/usr/lib或者/usr/local/lib
动态库:gcc xxx.c -lxxx. -L ./ -o xxx(生成xxx是可执行文件)
要在环境变量中增加libxxx.so的路径
export LD_LIBRARY_PATH=”动态库的路径”