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

来源:互联网 发布:ipad进入淘宝卖家中心 编辑:程序博客网 时间:2024/06/10 06:17

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

 

 

 

原创粉丝点击