静态、动态函数库的设计

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链接
2gcc -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链接
2ar 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;

原文地址:https://www.cnblogs.com/hjh-666/p/11196586.html