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

其基本生成步骤为   ⑴编写函数代码   ⑵编译生成动态库文件,要加上 -shared 和 -fpic 选项 ,
     库文件名以lib开头, 以.so 结尾。     -fpic 使输出的对象模块是按照可重定位地址方式生成的。-shared指定把对应的源文件生成对应的动态链接库文件libstr.so文件。使用方式分为两种: 隐式调用和显示调用  隐式调用类似于静态库的使用,但需修改动态链接库的配置文件/etc/ld.so.conf;  显示调用则是在主程序里使用dlopen、dlsym、dlerror、dlclose等系统函数。
 
第一个简单的动态库编写:
 
-----------func.h----------- 
 
#include <stdio.h>
void ShowHello();
 
----------func.c-----------
 
#include "func.h"
void ShowHello()
{
    printf("show hello func called \n");
}
gcc -fpic -shared -o libTest2.so  func.c   生成 动态库 libTest2.so
 
动态库显示调用:
 
------------uselib.c-----------------------
#include <dlfcn.h>
#include "func.h" 
#include <stdio.h>
int main()
{
    void(*pFun)();
    void* pdHandle=dlopen("/mnt/hgfs/LinuxShare/cplus/TestLib2/libTest2.so",RTLD_LAZY);
    if(!pdHandle)
    {
printf("dlopen failed \n");
return -1;
    }
    char* errCh=dlerror();
    if(NULL!=errCh)
    {
       printf("dlerror \n");
       return -1;
    }
    pFun=dlsym(pdHandle,"ShowHello");
    errCh=dlerror();
    if(NULL!=errCh)
    {
       printf("dlerror2 \n");
       return -1;
    }
    (*pFun)();
    dlclose(pdHandle);
    return 0;
}
 
通过命令  gcc -o uselib -ldl uselib.c  编译生成可执行文件 uselib    -ldl  选项表示 用到了共享库
 
./uselib  执行 可打印出    show hello func called

————————————————
版权声明:本文为CSDN博主「mtour」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mtour/article/details/8274200

最新文章

  1. HTML+CSS知识点总结
  2. 各种Java序列化性能比较
  3. 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
  4. VS Code First使用Mysql数据库详解
  5. ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)
  6. LVS的调度算法
  7. 重拾ZOJ 一周解题
  8. 自用有线IP切换
  9. 剑指offer-面试题13.在O(1)时间删除链表节点
  10. Spring Hiernate整合
  11. 开始奇妙的DP之旅
  12. 【Tomcat】Tomcat报错追踪
  13. web页面中快速找到html对应元素两种方法
  14. 如何查看目前正在使用的Windows10是哪个版本?
  15. SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
  16. 合并k个有序数组
  17. verilog代码 想法验证---与寄存器输出有关
  18. Python3.7中urllib.urlopen 报错问题
  19. oracle创建用户和角色、管理授权以及表空间操作
  20. Build Web Apps in Node and Express视频下载

热门文章

  1. Jmeter使用笔记001
  2. ArrayList 从源码角度剖析底层原理
  3. Python基础之魔术方法(一个序列容器的魔术方法)
  4. mysql jdbc8.0连接mysql
  5. SpringBoot: 后台接口文档 - 基于Swagger3
  6. Python自动化测试面试题-Python基础篇
  7. 10分钟物联网设备接入阿里云IoT平台
  8. 解决跨网段intouch嵌入视频问题
  9. js学习笔记之自调用函数、闭包、原型链
  10. jstack 命令使用经验总结