免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2006-03-01 16:51 |只看该作者
为什么你自己不写个代码例子来看看?
你看看我的帖子里面有一个讲解extern c的帖子,你看看有没有帮助,我认为是可以做到重载的

论坛徽章:
0
3 [报告]
发表于 2006-03-01 22:26 |只看该作者
重载就不能把function_name声明extern "C". 而且dlsym需用mangled name.

论坛徽章:
0
4 [报告]
发表于 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
5 [报告]
发表于 2006-03-02 09:14 |只看该作者
原帖由 converse 于 2006-3-1 16:51 发表
为什么你自己不写个代码例子来看看?
你看看我的帖子里面有一个讲解extern c的帖子,你看看有没有帮助,我认为是可以做到重载的


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

论坛徽章:
0
6 [报告]
发表于 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
7 [报告]
发表于 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
8 [报告]
发表于 2006-03-02 10:04 |只看该作者
原帖由 unicorns 于 2006-3-2 09:43 发表


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


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP