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