免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1576 | 回复: 7

请教关于动态链接库的问题 [复制链接]

论坛徽章:
0
发表于 2006-03-01 16:16 |显示全部楼层
通常的做法.

  1. extern "C"
  2. {
  3.      function_name() ;
  4. }
复制代码



  1.      dlopen("so_name") ;
  2.      dlsym("function_name") ;
复制代码


这样我有个问题不知道如何解决.
如果我对function_name进行重载的话会有什么后果呢.
也就是如何才能对函数function_name进行重载,还是根本就不行.
因为dlsym只通过函数名来定位.
是否有其他办法呢?

论坛徽章:
0
发表于 2006-03-01 16:51 |显示全部楼层
为什么你自己不写个代码例子来看看?
你看看我的帖子里面有一个讲解extern c的帖子,你看看有没有帮助,我认为是可以做到重载的

论坛徽章:
0
发表于 2006-03-01 22:26 |显示全部楼层
重载就不能把function_name声明extern "C". 而且dlsym需用mangled name.

论坛徽章:
0
发表于 2006-03-02 09:11 |显示全部楼层
原帖由 Alligator27 于 2006-3-1 22:26 发表
重载就不能把function_name声明extern "C". 而且dlsym需用mangled name.


谢谢,
这个我是不是可以理解为不使用extern "C"来进行声明.
在调用dlsym的时候传入转换过的function_name,当然这个名称要包含除了简单的名字之外
还要包含足够的其他信息.
那么我如何得到这个mangled name呢,我觉得应该不太可能让我手工去转换吧.
这里有些不明白,我查了好多地方,没找到一个明确的结果.

论坛徽章:
0
发表于 2006-03-02 09:14 |显示全部楼层
原帖由 converse 于 2006-3-1 16:51 发表
为什么你自己不写个代码例子来看看?
你看看我的帖子里面有一个讲解extern c的帖子,你看看有没有帮助,我认为是可以做到重载的


是啊,我也认为肯定是可以做到的,但是没找到如何做.
目前想了一个其他途径来解决.
但我还是想知道如果用dlsym的怎么解决.

论坛徽章:
0
发表于 2006-03-02 09:29 |显示全部楼层
原帖由 unicorns 于 2006-3-2 09:11 发表


谢谢,
这个我是不是可以理解为不使用extern "C"来进行声明.
在调用dlsym的时候传入转换过的function_name,当然这个名称要包含除了简单的名字之外
还要包含足够的其他信息.
那么我如何得到这个m ...


对啊. 用nm命令得到这个mangled name

>nm -g binary_file_name | grep function_name

论坛徽章:
0
发表于 2006-03-02 09:43 |显示全部楼层
原帖由 Alligator27 于 2006-3-2 09:29 发表


对啊. 用nm命令得到这个mangled name

>nm -g binary_file_name | grep function_name


那是要手工去生成这个名字咯?
关键是我的函数和函数名也是动态生成的,然后动态编译成动态链接库的.
所以我必须要在程序的运行时动态生成这些nm的结果.
在运行时我不可能停下来去nm一下看.
有什么好办法吗,我不想system一下,虽然那也行,不过看起来丑陋了点,呵呵.

论坛徽章:
0
发表于 2006-03-02 10:04 |显示全部楼层
原帖由 unicorns 于 2006-3-2 09:43 发表


那是要手工去生成这个名字咯?
关键是我的函数和函数名也是动态生成的,然后动态编译成动态链接库的.
所以我必须要在程序的运行时动态生成这些nm的结果.
在运行时我不可能停下来去nm一下看.
有什么好办法吗 ...


动态编译不需要用makefile, 或script吗? 把nm加进去就行了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP