免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3211 | 回复: 7
打印 上一主题 下一主题

请教 用C调用*.so 文件时函数如果包含参数如何调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-14 17:12 |只看该作者 |倒序浏览
我现在使用的是dlopen打开so文件的。
dlopen
dlswy [调用函数]
dlclose
dlerror
但是如果有函数有参数就不知道怎么解决了!!

论坛徽章:
0
2 [报告]
发表于 2010-04-14 17:15 |只看该作者
xxx.h

论坛徽章:
0
3 [报告]
发表于 2010-04-14 17:57 |只看该作者
百度知道

论坛徽章:
0
4 [报告]
发表于 2010-04-14 23:00 |只看该作者
func_name=dlsym(dll_handle,"func_in_dll");

然后
func_name(该怎么写怎么写);


貌似没有 dlswy

论坛徽章:
0
5 [报告]
发表于 2010-04-14 23:25 |只看该作者
dlsym

论坛徽章:
0
6 [报告]
发表于 2010-04-15 10:40 |只看该作者
报错了!
/root/SunStudioProjects/SubProjects_1/hello3lib/dist/Debug/SunStudio_12.1-Linux-x86/libhello3lib.so: undefined symbol: hello3

我使用的是sunstudio中的例子,只不过那里面是直接include后使用的
我不想包含到项目中来。

  1.     F_TESECSO ftestcso;
  2.     handle = dlopen("/root/SunStudioProjects/SubProjects_1/hello3lib/dist/Debug/SunStudio_12.1-Linux-x86/libhello3lib.so",RTLD_LAZY);
  3.     std::cout << "test1" << std::endl;
  4.     ftestcso = (F_TESECSO)dlsym(handle,"hello3");
  5.     std::cout << "test2" << std::endl;
  6.     if((error=dlerror())!=NULL)
  7.     {
  8.         std::cout << "test3" << std::endl;
  9.         fputs(error,stderr);
  10.         exit(1);
  11.     }
  12.     std::cout << ftestcso() << std::endl;
复制代码
执行的时候就直接跑到输出test3了。

论坛徽章:
0
7 [报告]
发表于 2010-04-15 11:45 |只看该作者
使用的时候先定义函数的原型

int (*testfunc)(int i, char *message);

然后
testfunc=dlsym(handle,"testfunc");

(*testfunc)(1, "go go go ");

论坛徽章:
0
8 [报告]
发表于 2010-04-15 13:40 |只看该作者
本帖最后由 bxfqing 于 2010-04-15 13:52 编辑

参考ibm文档
http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html

google很容易就有答案了
Linux 提供 4 个库函数( dlopen , dlerror , dlsym 和 dlclose ),一个 include 文件( dlfcn.h )以及两个共享库(静态库 libdl.a 和动态库 libdl.so ),以支持动态链接装入器。这些库函数是:

    * dlopen 将共享目标文件打开并且映射到内存中,并且返回句柄
    * dlsym返回一个指向被请求入口点的指针
    * dlerror 返回 NULL 或者一个指向描述最近错误的 ASCII 字符串的指针
    * dlclose关闭句柄并且取消共享目标文件的映射
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP