静态、动态函数库的设计
Linux应用程序需要调用外部函数,主要来源:系统调用、函数库。
函数库的链接方式有:静态函数库、动态函数库两种!
动态函数库:副档名为 .so,文件放置于"/lib/"目录中。 通过内存链接的方式进行调用,避免重复复制,灵活,节省运行空间,主推 --->>>不可独立运行
静态函数库:副档名为 .a,文件放置于"/usr/lib/"目录中。 是把整个包 括入程序里的,多进程运行时重复复制到所需的地方,程序占存比较大,升级麻烦 --->>>编译后的执行程序可独立运行。
Linux下的库函数链接方式默认是动态函数库,链接静态库需加上“ -static ”选项。
---------------------------------------------------------------------------------------------------------------------------------------------------------
命名有两个:链接名(myilb)和库文件命名(libmyilb),其中库文件名=“ lib + 链接名”
链接名(myilb.o):作为函数库链接,GCC默认链接C函数库,其他库需加“ -l ”,“ gcc (static) -lmylib test.c -o test ”(编译用);
库文件名(libmylib.so / libmylib.a):最后生成的函数库文件名字,用于存储于系统目录/usr/lib/或lib/内;
动态函数库设计:
1)gcc -c mylib.c -o mylib.o //将函数文件"-c"不完全编译,"-o"定名mylib.o链接 2)gcc -share -fPIC mylib.o -o libmylib.so //制作成动态函数库,“-o”定名为libmylib.so // -fPIC 规定输出对象的方式 -share指明产生动态库 3)cp libmylib.so /lib //动态库文件置于指定目录下
静态函数库设计:
1)gcc -c mylib.c -o mylib.o //将函数文件"-c"不完全编译,"-o"定名mylib.o链接 2)ar cqs libmylib.a mylib.o //制作成静态函数库,定名为libmylib.a // ar cqs 指令是生成库文件的意思 3)cp libmylib.so /usr/lib //静态库文件置于指定目录下
以上动、静态函数库均制作完成!
欲使用自己制作的库函数,在要使用库函数的.c文件的目录下添加.h文件,里面声明一下要用到的库函数
eg:" touch mylib.h " -> mylib.h文件内声明" int name (int a, float b); "等 -> 在应用程序中加入头文件" #include <mylib.h> "即可。
步骤:
1.制定静/动态函数库;
2.库函数文件复制至对应的目录中,并添加 name.h 文件声明库函数;
3.应用程序中加入自制库函数的头文件" #include <name.h> "即可使用;
4,编译完成。
动态:gcc test.c -lmylib -o test; 静态: gcc test.c -static -lmylib -o test;