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

Linux c调用so

发布网友 发布时间:2022-05-10 16:21

我来回答

1个回答

热心网友 时间:2023-10-15 20:00

实例代码(soTest.c):

1 #include <stdio.h>
2 #include <dlfcn.h>
3
4 int main(int argc, char *argv[]){
5 void * libm_handle = NULL;
6 float (*cosf_method)(float);
7 char *errorInfo;
8 float result;
9
10 // dlopen 函数还会自动解析共享库中的依赖项。这样,如果您打开了一个依赖于其他共享库的对象,它就会自动加载它们。
11 // 函数返回一个句柄,该句柄用于后续的 API 调用
12 libm_handle = dlopen("libm.so", RTLD_LAZY );
13 // 如果返回 NULL 句柄,表示无法找到对象文件,过程结束。否则的话,将会得到对象的一个句柄,可以进一步询问对象
14 if (!libm_handle){
15 // 如果返回 NULL 句柄,通过dlerror方法可以取得无法访问对象的原因
16 printf("Open Error:%s.\n",dlerror());
17 return 0;
18 }
19
20 // 使用 dlsym 函数,尝试解析新打开的对象文件中的符号。您将会得到一个有效的指向该符号的指针,或者是得到一个 NULL 并返回一个错误
21 cosf_method = dlsym(libm_handle,"cosf");
22 errorInfo = dlerror();// 调用dlerror方法,返回错误信息的同时,内存中的错误信息被清空
23 if (errorInfo != NULL){
24 printf("Dlsym Error:%s.\n",errorInfo);
25 return 0;
26 }
27
28 // 执行“cosf”方法
29 result = (*cosf_method)(0.0);
30 printf("result = %f.\n",result);
31
32 // 调用 ELF 对象中的目标函数后,通过调用 dlclose 来关闭对它的访问
33 dlclose(libm_handle);
34
35 return 0;
36 }

在这个例子中主要是调用了 math 库(libm.so)中的“cosf”函数,dlopen函数的第二个参数表示加载库文件的模式,主要有两种:RTLD_LAZY 暂缓决定,等有需要时再解出符号;RTLD_NOW 立即决定,返回前解除所有未决定的符号。另外记得引用包含API的头文件“#include <dlfcn.h>”(^_^)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
行车工退休是否有工龄年限限制?男士、女士的的退休年龄。 北京中新惠尔健康科技有限公司解决方案 北京中新惠尔健康科技有限公司公司文化 北京中新惠尔健康科技有限公司服务产品 北京中新惠尔健康科技有限公司历史沿革 北京中新惠尔健康科技有限公司惠尔简介 速腾能放多久? 昆山汽车搭电多少钱? 比亚迪救急估计电瓶没电了 盒马员工超过1小时算不算大吧 广州的万国和三校哪个好? android studio 怎么连接so库 librs.main.so是什么包 libmain.so怎么解决 简历 自己负责一个项目应该怎么写 日语中“神”的发音 神的部首怎么读 神的读音是什么 神这个读音是平舌吗? 话梅HARMAY有哪些地方让你着迷? 神的拼音是什么你可以 重庆话梅Harmay,有没有去打卡的姐妹来说说怎么体验? 重庆的话梅Harmay到底好在哪里,为什么那么多姐妹都去过了? harmay话梅能加盟吗? 话梅Harmay自有好物都来自哪里? 企业所得税就是增值税? 最近很多人都在说HARMAY话梅不错,有姐妹可以具体介绍一下吗? 为什么说话梅HARMAY是宝藏店铺? 为什么HARMAY话梅坚持使用仓储符号来表达创意理念? 话梅harmay有lv吗 指南针司考的面授上课地点在哪里? appstore家庭成员怎么自己付款 申请新怎么申请? 怎样申请新? 新怎么申请 怎样注册新 南京有哪些好的司法考试培训机构,求推荐 怎样才能注册一个新的- 问一问 注册一个新的怎么注册 新手机如何注册新码步骤 姚子羚的资料? 我想重新注册一个新的,该怎么办? nba2k17未加密版是什么版本 现在可以申请新的吗? 食品质量管理的各发展阶段包括哪些?核心内容有什么优缺点? 现在可以申请新的吗? 爸爸过生日,10岁的女儿送什礼物最好除了做手工 爸爸生日应该送什么礼物手工 在统计质量管理阶段什么开始受到重视 如何换健康码绑定的?