Linux系统下动态库与静态库的制作步骤。
静态库:
1.将源文件编译生成目标文件:
······gcc -c 文件名.c -o 名.o
2.创建静态库,用到的是ar命令,可以将多个.o 转换成.a:
······ar crs lib名.a 名.o
静态库制作完成,下面是测试:
3.测试使用的静态库:
······gcc main.c -L./路径 -l名 -------这个名字不包含lib和.a
4.执行 ./a.out
例:
拿一个简单的例子,一个函数.c 一个主函数 一个头文件
然后把步骤带入:
静态库制作到测试完成。
动态库:
1.将源文件编译生成目标文件 -fPIC 创建与地址无关的编译程序
gcc -fPIC -c 名.c -o 名.o
2.创建动态库
gcc -shared -o lib库名.so 名.o
3.测试动态库使用
先把库拷贝到/usr/lib和/lib目录下,不然会报错,(或用大写的i指定路径)
然后 gcc main.c -L./ -l库名 -------也是去掉lib和.so
4.执行时需要加上库名
./a.out libmyhello.so
中间出了点小问题,所以分开截了。
动态库也完事了,运行的时候一定要带上动态库。
动态库与静态库的区别:
载入时刻:在程序编译时被连接到目标代码中,动态库在程序运行时被载入代码中
运行速度:静态库运行时不需要加载库,运行速度快
代码体积和移植性:因为静态库中的代码复制到了程序中,所以体积较大,编译后就可以删掉静态库了,移植时只需要吧a.out 复制过去就可;动态库的话因为每次运行都需要动态库的存在,所以移植性较差。
库升级后: 静态库升级后,程序需要重新编译链接,动态库不用