linux共享库的编译

来源:互联网 发布:长城显示器怎么样 知乎 编辑:程序博客网 时间:2024/05/21 09:04


       linux下的库有两种:静态库和共享库。共享库,一般也被称为动态链接库。
       静态库的代码在编译过程中已经被载入可执行程序,因此体积较大,一般以libxxxx.a形式存在。
      共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小,一般以libxxxx.so的文件形式存在。

      库是别人写好的现有的,成熟的,可以复用的代码。实际项目开发中,每个程序都要依赖很多基础的底层库,不需要每个程序员去重新发明轮子,因此库的存在意义非同寻常。

      共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。

       ldd命令可以查看一个可执行程序依赖的共享库,

例如:


     要自己编写一个动态链接库,以供多个进程或其他程序员使用,分为以下两步:

 (1)编写代码,包括头文件和源文件;

 (2)将一步中编写的源代码文件编译成一个动态库:libXXXX.so。

     下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test.c(实际项目中一般有更多头文件和源文件,我们稍后将这几个文件编译成一个动态库libtest.so),以及一个测试文件:test_main.c 。

    共享库头文件:

#include "stdio.h"void test();

   源文件:test.c:

void MyTestFunction(){       printf("this is in test for shared object... ");}


最后,将以上文件编译成一个动态链接库libtest.so,以方便别人可以直接使用这三个接口:


$ gcc test.c -fPIC -shared -olibtest.so

 

到此为止,大功基本高成,动态链接库已经成功生成了。  

原创粉丝点击