linux中静态库和动态库的创建和使用

    技术2022-05-20  27

    1,linux中的库有两类:静态库和动态库

          静态库就是在编译的时候进行链接的库,库的代码添加到要编译的模块中,后缀为:.a,相当于Windows中的.lib文件。

          动态库是指在运行时候动态的链接的库,库的代码并没有添加到使用库的模块中。后缀是.so,相当于Windows中的.dll文件。

          库通常的命名习惯是:以lib作为前缀,使用的时候有两种方式,一种编译的时候直接写文件全名,另一种方式是-l文件名(没有lib前缀和.a或者.so后缀),具体的使用方法见下边的说明。

    2,静态库的创建和使用:

         (1)创建方法:首先编写需要加入到库中的c文件:fun1.c和fun2.c,如下所示:

            /fun1.c/

           #define PI 3.14

           double getPerimeter(double d)           //根据直径计算圆的周长        {

                double peri = PI * d;

                return peri;

           }

        

         /fun2.c/

         #define PI  3.14

         double getArea(double d)

         {

            double area = PI  * (d/2) * (d/2);

            return area;

         }

        上边是创建了两个需要编译到库中的c源文件,下边使用命令,编译源文件,创建静态库。

        编译命令:gcc -c fun1.c fun2.c ,默认的生成了fun1.o和fun2.o两个目标文件。

        创建静态库: ar -cvq libfuncs.a fun1.o fun2.o 生成了libfuncs.a这个静态库文件

        (2)静态库的使用,有两种方法

          首先写好使用静态库的c源文件,如下所示:

          /function.c/    

           #include<stdio.h>

     

           //使用之前需要先声明

           double getPrimeter(double d);

           double getArea(double d);

     

           int main()        {

                double d = 12.4 ;

                double primeter = getPrimeter(d);

                double area = getPrimeter(d);

                printf("the diameter is : %f , the primeter is %f , and the area is %f " , d, primeter , diameter);

           }

     

           下边需要编译代码,有两种方式:

           A,gcc function.c  <absolutepath>/libfuncs.a

           B,gcc function.c  -L<pathtothelibrary>  -lfuncs

           上边两种方编译命令的不同之处是,前一个相当与编译两个普通的文件,后一种是先使用-L确定库的目录,然后使用-l选项来链接库文件。

          现在运行编译后的结果就可以看到打印出来的信息了:./a.out

     

     

     


    最新回复(0)