Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231072
  • 博文数量: 51
  • 博客积分: 235
  • 博客等级: 入伍新兵
  • 技术积分: 25
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-16 23:16
文章分类

全部博文(51)

文章存档

2016年(3)

2015年(35)

2014年(12)

2013年(1)

分类: 嵌入式

2014-02-23 12:41:46

Linux下的动态库以.so为后缀,在Linux下使用动态库一点入门步骤,以便以后能方便使用。

第一步:编写Linux程序库

文件1.动态库接口文件

//动态库接口文件getmaxlen.h

点击(此处)折叠或打开

  1.   #ifndef _GETMAXLEN_H_
  2.   #define _GETMAXLEN_H_
  3.   int getMaxLen(int *sel,int N);
  4.   #endif

文件2.动态库程序实现文件

//动态库程序实现文件getmaxlen.c

点击(此处)折叠或打开

  1. #include "getmaxlen.h"
  2. int getMaxLen(int *sel,int N)
  3. {
  4.    int n1=1,n2=1;
  5.    for(int i=1;i<N;i++)
  6.    {
  7.         if(sel[i]>sel[i-1])
  8.         {
  9.              n2 ++;
  10.              if(n2 > n1)
  11.              {
  12.                  n1 = n2;
  13.              }
  14.         }
  15.         else
  16.         {
  17.              n2 = 1;
  18.         }
  19.    }
  20.    return n1;
  21. }

第二步:编译生成动态库

     gcc getmaxlen.c fPIC shared o libtest.so

由以上命令生成动态库libtest.so,为了不需要动态加载动态库,在命令时需以lib开头以.so为后缀。

fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

shared:指明编译成动态库。

第三步:使用动态库

1.      编译时使用动态库

文件1.动态库使用文件test.c

//使用动态库libtest.so,该文件名为test.c

点击(此处)折叠或打开

  1. #include "getmaxlen.h"
  2. int main()
  3. {
  4.    int Sel[] = {2,3,6,5,3,2,1,2,3,4,5,6,7,6,5};
  5.    int m;
  6.    m = getMaxLen(Sel,15);
  7.    printf("%d",m);
  8.    return 0;
  9. }

编译命令:

gcc test.c L . l test o test

     –L:指明动态库所在的目录

      -l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.sol参数为-l test

     测试:

     ldd test

        ldd 测试可执行文件所使用的动态库

编译时指定动态库加载路径命令:gcc test.c L . l test -Wl,-rpath,./ –o test 



阅读(1002) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~