Linux库文件编写和调用

简述:本文讲了什么是库和怎么用库。。。

这里的步骤,只要你挨个执行,肯定会成功,这篇文章肯定能帮你建立库,调用库!!!


一、为什么要使用库文件

库文件相当于一个公共仓库,里面放一些会重复使用的公共代码,如某些函数、常量等。这样,不同的当文件想用某段代码时,不用再费劲写,直接调用库文件就行了!而且,修改起来也方便,对吧!


二、静态库与动态库

    静态库,程序在编译时加载库文件的代码。

    动态库,程序在运行时加载库文件的代码。

    换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。

    如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。

    静态库的原则是“以空间换时间”,增加程序体积,减少运行时间;

    动态库则是“以时间换空间”,增加了运行时间,但减少了程序本身的体积。


三、静态库的编写和使用

       静态库文件的扩展名一般为.a

编写步骤:

    1、编写函数文件,test.c

    #include <stdio.h>

    void  test(char*  arg){

        printf("test: we passed %s\n", arg);    //输出字符串

    }

    2、编译函数文件,生成test.o,用ls *.o查看生成的所有.o文件

    $  gcc -c test.c

-c的作用是,阻止编译器创建一个完整的程序。你看,如果,不用-c,那就是在创建一个完整程序,那就会失败,因为,你还没定义main函数!

    3、编写头文件 test.h:

    void test(char* arg);   //就是简单的声明

    4、编写调用程序,并编译,program.c,来调用库文件

#include <stdlib.h>

#include "test.h"    

int main(){

    test("hello world");

    exit(0);

}

编译,注意:这里也得用-c,为了生成program.o来和test.o链接

$ gcc -c program.c    //生成program.o !!!

   5、与目标文件链接,并运行测试:为编译器显示的指定目标文件

$ gcc -o program  program.o  test.o    //指定名称,直接调用目标文件test.o。注意,这里的test.o是test.c生成的,目前没对test.h做任何操作!,,,我这名字起的不好,以后更改。

$ ./program        //运行program.o

test : we passed hello world

$

    6、创建库文件,并添加目标文件(函数)

使用ar程序创建一个归档文件(静态库),并将你的目标文件添加进去。libtest.a就是指test库文件,libxx.a指示一种格式!

$ ar crv libtest.a  test.o      //把test.h生成静态库文件libtest.a ,并添加目标文件test.o

a - test.o    //表示目标文件成功添加到库文件

    7、调用库文件

$ gcc -o program  program.o  libtest.a    //program.o调用库文件libtest.a,为了使用库里面的目标test.o

$ ./program

test: we passed hello world

$

 你也可以使用-l来访问库函数,但因其未保存在标准位置,所以,你必须使用-L来告诉编译器,怎找到它:

$ gcc -o program  program.o  -L.  -ltest

$ ./program

test: we passed hello world

$

-L. 告诉编译器,在当前目录(.)查找函数库。ltest告诉编译器,使用名为 libtest.a的函数库。



四、动态库的编写(共享库)

 动态库一般以.so结尾,就是shared object的意思。

步骤:

1、编写函数文件

2、编译生成动态库文件,要加上 -shared 和 -fpic 选项 ,

     库文件名以lib开头, 以.so 结尾。

   使用方式分为两种: 隐式调用和显示调用  



猜你喜欢

转载自blog.csdn.net/qq_28657577/article/details/80641309
今日推荐