静态库与动态库的对比及创建
静态库
是在可执行程序运行前就已经加入到代码中,成为执行程序的一部分;静态库可以认为是一些目标代码的集合。按照习惯,一般以“.a”作为文件后缀名。常用在对空间要求较低,对时间要求较高的核心程序中,例如操作系统的启动进程。
共享库
是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。常用在对空间要求较高,对时间要求较低的核心程序中。
静态库会分别加载到每一个调用的地方,而动态库只会在调用时加载到内存里,用完后释放。因此使用静态库可以提高编译效率(随着编译器的发展,这个差距已经很小),但是会消耗更多的内存空间;使用动态库编译时更慢,但是使用更少的内存空间。
创建
静态库的创建
要创建一个静态库,或要将目标代码加入到已经存在的静态库中,可以使用以下命令:
ar rcs libmylib.a(库名必须以lib开头,后缀名必为.a) file1.o(库材料)
静态库制作步骤:
1、将.c文件生成.o文件
gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o
2、使用ar工具制作静态库
ar rcs lib库名.a file1.o file2.o
3、编译静态库到可执行文件中
gcc test.c lib库名.a -o a.out
动态库的创建
1、将.c文件生成.o文件(生成与位置无关的代码)
gcc -c file1.c -o file1.o -fPIC
gcc -c file2.c -o file2.o -fPIC
2、使用gcc -shared制作动态库
gcc -shared lib库名.so file1.o file2.o
3、编译可执行程序时,指定所使用的动态库。-l,指定库名 -L,指定库路径
gcc test.c -o a.out -l库名 -L./llib
4、运行可执行程序./a.out