动态链接库(dlopen、dlsym、dlclose)(Linux)
一、介绍
动态链接,是在程序已经执行时,加载链接的方法
二、有关动态链接库生成
1、在导出处使用 extern "C"申明
extern "C"
{void fun1(){...}void fun2(){...}
}
2、在链接时使用 -fPIC。fPIC是说明该库与位置无关,可以通过全局偏移表(GOT)访问地址
1、终端/makefile
gcc main.cpp -fPIC -shared -o libapp.so2、CMakeLists.txt (cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
add_library(app SHARED main.cpp)
3、动态链接库依赖其他库
(1)链接动态库,直接链接
(2)链接静态库,该静态库需要符合 fPIC
三、接口介绍
头文件:<dlfcn.h>
链接 dl动态库
1、打开
void *dlopen(const char *filename, int flag);
返回值:成功:返回值接口句柄失败:NULL
参数:filename:动态链接库路径flag:RTLD_LAZY:函数符号,调用dlsym时解析RTLD_NOW:函数符号打开时解析2、关闭
int dlclose(void *handle);
返回值:成功:0失败:非零
参数:接口句柄3、解析函数
void *dlsym(void *handle, const char *symbol);
返回值:成功:返回函数指针,经过强转即可直接调用失败:NULL
参数:handle:接口句柄symbol:导出库的函数名称(符号)
动态链接库(dlopen、dlsym、dlclose)(Linux)相关推荐
- LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror
dlopen 基本定义 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathn ...
- LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror【zt】
dlopen 基本定义 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathname, ...
- LINUX下动态链接库的使用(dlopen/dlsym/dlclose/dlerror)
dlopen 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathname, in ...
- dlopen dlsym dlclose加载动态链接库
dlopen 在dlopen()函数以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程.使用dlclose()来卸载打开的库. 基本定义 功能:打开一个动态链接库,并返回动态 ...
- linux c之动态打开链接库(dlopen dlsym dlclose)
1 linux提供了加载和处理动态链接库的系统调用 2 主要函数 1) dlopen. dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下: RTLD_LA ...
- 解决函数名冲突问题(dlopen,dlsym,dlclose)
背景 最近在加载动态库的时候有遇到一个问题,如图1所示,多个动态库同时提供同名函数但是具体实现却不同的情况,那么有个问题,当我们调用的时候怎么确认调用的是某个静态库中的函数?其实,当我们链接所有的静态 ...
- 用g++编译生成动态连接库*.so的方法及连接(dlopen() dlsym() dlclose())
================================================================ //test_so_file.h ifndef TEST_SO_FIL ...
- net-snmp交叉编译出现 undefined reference to dlopen,dlsym,dlclose错误
移植net-snmp到armlinux上,编译测试程序的时候出现 dlopen,dlsym等未定义的情况 查了下,问题出现在编译选项上,需要加上 -ldl选项.加了选项之后问题得以解决.
- Unity发布预审:检查出调用苹果禁用api: [dlopen, dlsym]
表现: 打包出来的ipa在腾讯的wetest的ios预审中报以下错误. 最主要的就是这个[dlopen][dlsym],据公司的测试姐姐说这是苹果严打的对象.那么怎么从项目中找到问题代码并修改呢? 解 ...
- dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchan关于苹果禁用JSPatch(热修复一类),上架审核被拒问题
应用很长一段时间没有上架了, 最近上了一次居然被打回来了,后续提交了很多次都被打回. 也跟苹果大大发了好几封邮件,但是依然无果 被拒原因具体如下 Hello, Thank you for your r ...
最新文章
- zabbix配置外部邮件服务器进行邮件报警
- 理解cookie和session
- 重启大法好!线上常见问题排查手册
- java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)
- 新手篇 | K8S配置最佳实践
- Vmware workstation 安装解压 vmwaretools 提示只读文件
- mysql 上级组织参数值_MYSQL组织结构设计构思(快速查上级和下级)
- 【作业4】朗途职业规划测试
- 网页测速 php,好用实用的站长测速工具网站大全
- 如何划分和细化有限元网格,才能提高计算的精度和速度?
- Unity3D帧动画,图片的切换实现动画效果
- Timer already cancelled 或者 Task already scheduled or cancelled
- java零基础学习第九天
- 京东商城主图视频抓取的方法步骤
- bi平台是如何进行数据的采集呢
- 当STM32遇上RFID
- 【MySQL高级篇】第06章_索引的数据结构
- 计算机无法装补丁,电脑无法安装kb4012212补丁如何处理|电脑无法安装kb4012212补丁的处理方法...
- 《用PS给照片换底》
- 怎样在ps中对海报图颜色叠加 教你快速实现颜色叠加方法
热门文章
- Vue 中 scoped 样式穿透
- 通过局域网让别人访问自己的电脑项目
- 河海大学计算机网络毕业设计,河海大学文件河海大学毕业设计.doc
- OpenCV 书稿:前言
- 报错:version magic ‘3.10.0_hifone SMP mod_unload ARMv7 p2v8 ‘ should be ‘3.10.0_s40 SMP mod_unload ARM
- 阿里云code下载代码和更新代码
- OpenMVS+Win10+VS2019+vcpkg编译及问题
- LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(五)之使用RabbitMQ缓存消息
- wxPython 4.2.0 发布
- qq飞车与服务器未响应,QQ飞车游戏安装失败系统错误提示问题解决方法_QQ飞车游戏安装失败怎么办_游戏堡...