转自:http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html

http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html

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

第一步:编写Linux程序库

文件1.动态库接口文件

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

#ifndef _GETMAXLEN_H_

#define _GETMAXLEN_H_

int getMaxLen(int *sel,int N);

#endif

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

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

#include "getmaxlen.h"

int getMaxLen(int *sel,int N)

{

   int n1=,n2=;

   for(int i=;i<N;i++)

   {

        if(sel[i]>sel[i-])

        {

             n2 ++;

             if(n2 > n1)

             {

                 n1 = n2;

             }

        }

        else

        {

             n2 = ;

        }

   }

   return n1;

}

第二步:编译生成动态库

     gcc getmaxlen.c –fPIC –shared –o libtest.so

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

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

–shared:指明编译成动态库。

第三步:使用动态库

.      编译时使用动态库

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

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

#include "getmaxlen.h"

int main()

{

   int Sel[] = {,,,,,,,,,,,,,,};

   int m;

   m = getMaxLen(Sel,);

   printf("%d",m);

   return ;

}

编译命令:

gcc test.c –L . –l test –o test

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

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

     测试:

     ldd test

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

.      动态加载方式使用动态库

文件内容:

//动态库的动态加载使用

int main()

{

      void *handle = NULL;

      int (*getMaxLen)(int *sel,int N);

      int sel[] = {,,,,,,,,,,,,,};

      handle = dlopen("./libtest.so",RTLD_LAZY);

      if(handle == NULL)

      {

          printf("dll loading error.\n");

          return ;

      }

      getMaxLen = (int(*)(int *,int))dlsym(handle,"getMaxLen");

      if(dlerror()!=NULL)

      {

          printf("fun load error.\n");

          return ;

      }

      printf("%d\n",getMaxLen(sel,));

}

编译命令:

gcc –ldl test1.c –o test

gcc -o test test.c ./libmytools.so

Linux动态库的编译与使用 转载【转】的更多相关文章

  1. Linux动态库的编译与使用 转载

    http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html Linux下的动态库以.so为后缀,我也是初次在Linux下 ...

  2. Linux动态库的编译与使用

    转载: http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html Linux下的动态库以.so为后缀,我也是初次在Li ...

  3. Linux 动态库的编译和使用

    1. 动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组 ...

  4. linux动态库编译和使用

    linux动态库编译和使用详细剖析 引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, ...

  5. Linux上静态库和动态库的编译和使用

    linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...

  6. linux动态库编译和使用详细剖析 - 后续

    引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...

  7. linux动态库默认搜索路径设置的三种方法

    众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...

  8. linux动态库加载RPATH, RUNPATH

    摘自http://gotowqj.iteye.com/blog/1926771 linux动态库加载RPATH, RUNPATH 链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共 ...

  9. Android NDK开发及调用标准linux动态库.so文件

    源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...

随机推荐

  1. golang 使用os/exec配合context实现的超时机制

    在使用golang开发中,调用外部可执行程序通过exec包是我们常用的方式.如何控制超时请见如下样例: var ( Timeout = 3 * time.Second ) func Command(n ...

  2. Django REST Framework extensions

    GitHub:https://github.com/chibisov/drf-extensions 官方文档:http://chibisov.github.io/drf-extensions/docs ...

  3. sklearn—特征工程

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  4. Event Recommendation Engine Challenge分步解析第三步

    一.请知晓 本文是基于: Event Recommendation Engine Challenge分步解析第一步 Event Recommendation Engine Challenge分步解析第 ...

  5. o(1), o(n), o(logn), o(nlogn)

    转自:https://blog.csdn.net/Mars93/article/details/75194138 在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn) ...

  6. 安装FreeIPA以及应用时报错汇总

    安装FreeIPA以及应用时报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ERROR DNS zone yinzhengjie.org.cn already exis ...

  7. SVN简单的使用

    一.什么是SVN有什么用? SVN是Subversion的简称,是一个开放源代码的版本控制系统.主要是用于团队开发中的资源共享和团队协作. 二.SVN服务器的安装 1.下载安装文件 在下面地址下载Vi ...

  8. Docker笔记一:Docker介绍

    目录 什么是Docker? Docker的核心概念 Docker镜像命令 Docker容器命令 Docker实战 查看我的镜像 启动Redis Docker中国镜像加速 血与泪的教训 什么是Docke ...

  9. @jsonProperty 实现返回自定义属性名字

    实现场景: 比如说前端需要返回userPic 这个字段,但是我们数据库定义的是pic字段. 可以用@jsonProperty 来实现 public class User{ @JsonProperty( ...

  10. 【转载】C# 字符串截取

    https://blog.csdn.net/maba007/article/details/78424760