Linux库概念
分文件编程的好处
分模块的编程思想;功能责任划分;方便调试;主程序简洁
关于库的简单解释
静态函数库:程序执行前(编译)就加入到目标程序中
优点:运行快;发布程序时无需提供静态库,移植方便
缺点:大;更新,部署,发布比较麻烦
动态函数库:程序执行时动态(临时)由目标程序去调用
优点:小,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可共用,节省内存;程序升级简单。
缺点:运行慢(相对静态库);发布程序需要提供依赖的动态库
关于库的制作
静态库
静态库的制作(格式:eg:libfuncs.a)
- gcc func.c -c 生成func.o文件(func.c 为要生成静态文件的源文件)
- ar rcs libfuncs.a func.o func.o文件生成libfuncs.a静态库文件(libfuncs即为所要生成的目标静态文件)
静态库的使用
gcc main.c -lfuncs -L ./ -o mainStatic(main.c为所要执行的主程序;-lfuncs -l表示制作要用的静态库,库名去掉lib和后缀;-L表示从-L指定的路径去找静态库。默认是从 /usr/lib 或 /usr/local/lib 去找)
动态库
动态库的制作
动态库和共享函数库表示一个(Linux上叫共享对象库,文件后缀为 .so,windows上叫动态加载函数库,后缀名为 .dll)
命名规则:
命令:gcc -shared -fpic func.c -o libfuncs.so ( -shared 指定生成动态库;-fipc标准,选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码)
动态库的使用
gcc main.c -lfuncs -L ./ -o mainDy 和静态库的使用一样
不过在使用的时候要指定动态库 的路径
可以使用:export LD_LIBRARY_PATH=“动态库路径”,(可以指定该程序运行时,在 LD_LIBRARY_PATH 所执行的路径去找库文件)不过在每次进入树莓派的时候都需要指定,所以可以将此命令和需要执行的程序放在一个shell脚本里来共同执行。
// 首先创建start.sh脚本
export LD_LIBRARY_PATH="动态库路径"
./mainDy
// 保存退出,加可执行权限 chmod +x start.sh
// ./start.sh 即可执行