库的制作
静态库
1、命名规范:以lib开头,.a结尾,中间为库名
eg:
libhello.a
2、特点:在程序编译阶段、将库中的代码赋值拷贝到目标程序中
静态库的优缺点:
优点:
运行速度快
可移植性高
程序运行时,不需要依赖静态库的存在
缺点:
编译速度慢
生成的目标文件大
库的更新不方便,每一次更新库都需要编译源程序
静态库的制作流程
//1、设计接口函数
得到.c功能文件和.h头文件
eg
//2、得到所有的c文件的目标文件(.o)
gcc -c hello.c -o hello.o
eg
//3、将所有的.o文件通过编译生成静态库文件
ar crs libhello.a hello.o
eg
//4、链接库文件
gcc main.c -L. -lhello
//-L:指定路径
//-l:链接指定库文件
eg
现在只需要库和头文件就可以编译主函数文件了
ie
可以保护功能函数
动态库(共享库)
1、命名规范:以lib开头,.so结尾,中间为库名
eg:
libhello.so
2、特点:在程序编译阶段,仅记录函数名称,在运行阶段将库中程序拷贝然后执行
动态库的优缺点:
优点:
编译速度快
占用空间小
库的更新快,每次更新必须要编译源程序
缺点:
运行速度慢
可移植性差
程序运行时,动态库必须存在
动态库的制作流程
//1、设计接口函数
得到.c功能文件和.h头文件
eg
//2、得到所有的c文件的目标文件(.o)
gcc -fPIC -c world.c -o world.o
eg
//3、将所有的.o文件通过编译生成静态库文件
gcc -shared -o libworld.so world.o
eg
1.1、检查环境变量
echo $PATH
1.2、把动态库文件加入环境变量
2.2、复制路径
pwd
2.3、加入到my.conf
2.4用ldconfig命令让配置文件生效
sudo ldconfig
//4、链接库文件
gcc main.c -L. -lhello
//-L:指定路径
//-l:链接指定库文件
eg
现在只需要库和头文件就可以编译主函数文件了
ie