问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在麒麟系统中调用so读卡动态库?

发布网友 发布时间:2022-04-22 15:56

我来回答

1个回答

热心网友 时间:2022-07-13 06:41

概念
加载动态链接库,首先为共享库分配物理内存,然后在进程对应的页表项中建立虚拟页和物理页面之间的映射。你可以认为系统中存在一种引用计数机制, 每当一个进程加载了共享库(在该进程的页表中进行一次映射),引用计数加一;一个进程显式卸载(通过dlclose等)共享库或进程退出时,引用计数减 一,当减少到0时,系统卸载共享库。
头文件

#include <dlfcn.h>
相关函数介绍

(1)打开动态链接库:dlopen
函数原型

void *dlopen (const char *filename, int flag);
flag:分为这两种
RTLD_NOW:在dlopen返回前,解析出全部没有定义的符号,解析不出来返回NULL。
RT_GLOBAL:动态库定义的符号可被其后打开的其他库解析。
RT_LOCAL:和上面相反,不能被其他库解析。默认。
RTLD_LAZY:暂缓决定,等有需要时再解出符号

返回值:

打开错误返回NULL
成功,返回库引用
dlopen用于打开指定名字(filename)的动态链接库(最好文件绝对路径),并返回操作句柄。
(2)取函数执行地址:dlsym

函数原型

void *dlsym(void *handle, char *symbol);
dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。
(3)关闭动态链接库:dlclose

函数原型

int dlclose (void *handle);
returns 0 on success, and nonzero on error.
dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

(4)动态库错误函数:dlerror
函数原型

const char *dlerror(void);
当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。

示例
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("/tmp/libtest.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s ", dlerror());
exit(1);
}
cosine = (double(*)(double))dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s ", error);
exit(1);
}
printf ("%f ", (*cosine)(2.0));
dlclose(handle);
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么药止痒效果好 慕容三藏履历 职业cf电脑配置cf电脑配置要求是什么 玩3a电脑配置要求想玩3a大作需要什么配置 台式电脑哪些可以畅享3a大作想玩3a大作需要什么配置 七彩虹i7-10700台式机 性能强劲 高效静音 小黄鱼游戏台式电脑主机(i7-10700F、16GB、512GB、RTX3070)-适用... 工伤保险记什么科目 在4×4的正方形格纸中,有一个以格点为顶点的△ABC,请你找到点C,使三角... 在4×4方格中, 要求C点在格点上,且以AB为边的△ABC为直角三角形,标出所... dlopen和System.loadLibrary的区别 普通工业电费如何计算电费? 想请教一下给各位大神,c中调用.so动态库的函数,直接调用函数和使用dlopen调用有什么不同 水电费统计表(A4纸可打印) linux动态库调用动态库linux动态库的调用 五个月水费和电费统计图 Linux下C/C++动态库在运行时是怎样加载进来的 电费有一年统计吗? linux下的动态库是如何在程序运行时加载 下面是几个学生家三月份电费情况统计 请教关于android linux动态库.so的加载调用 2020年1月2月3月4月5月6月7月电费清单 求助,undefined reference to symbol dlopen@GLIBC 用2个月的水费电费燃气费制成复式条形统计图 交叉编译时提示 对&#39;__C_ctype_b&#39;的未定义引用 小学生水费电费统计表怎么画 几个房子的用电清单哪里可以查询到,我需要统计电费? 上几个月的电费单可以去那里查?我需要统计电费情况 电脑怎样设置才可以在桌面上任意位置放东西? 电费第一阶梯第二阶梯是怎么计算的 无法获取未定义null的情形怎么办 统计家里的电费水费电话费等生活费用 为什么调用dlopen崩溃 无法获取未定义null的情形怎么办? 我家三个人,6、7、8月份,一般晚上开两台空调,每个月电费580多元,比往年都要多,是不是很不正常? 下表是王依琳家2019年上半年电费开支情况统计表可是不小心被水弄湿擦破了你知 hhvm和php的载入so的不同 请问美国的电费贵吗? 一个完整的电脑配置需要哪些东西 linux下dlopen可以访问c++的类对象吗 为什么换一个手机接龙顺序就不一样了 有没有什么办法可以自动群接龙? 怎样发接龙 接龙数字怎么排序往下排 怎样复制粘贴接龙排号? 如何让空当接龙自动按顺序选局 微信接龙图片怎么设置只有发起者才能看到图片信息 微信群接龙怎么找到发起人 怎样用最少内存下载qq并且能玩游戏