免费注册 查看新帖 |

Chinaunix

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

[C++] dlopen使用问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-27 14:23 |只看该作者 |倒序浏览
请教:使用dlopen,dlsym将动态库的函数加载后调用,发现存在如下的问题,请教定位的方法:
1、使用dlopen加载函数后,调用函数执行没有问题但是结果不正确。
2、去掉dlopen的过程,直接调用动态库中的函数,执行正确。

目前不知道问题在什么地方,请教如何定位?
加载函数如下:
    void *dl_handle = NULL;
    char *error = NULL;

    /* Open the shared object */
    dl_handle = dlopen(pLibraryName, RTLD_LAZY );
    if (!dl_handle)
    {
         return -1
    }

    char* error = NULL;
    pFunc = dlsym( dlHandle, "mysql_rollback");
    error = dlerror();
    if (error != NULL)\
    {
        return -1
    }

然后直接使用pFunc指针调用函数

        

论坛徽章:
0
2 [报告]
发表于 2013-03-27 14:24 |只看该作者
顶一个,等待大牛解答!

论坛徽章:
0
3 [报告]
发表于 2013-03-27 15:07 |只看该作者
看看函数是否有全局变量, 要是有全局变量,使用了dlopen 调用的函数,那么全局变量值为0

论坛徽章:
0
4 [报告]
发表于 2013-03-28 14:27 |只看该作者
第三方的库,不好确认是否有全局变量,如果是这个问题,应该怎么解决?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2013-03-28 14:49 |只看该作者
你的dlopen支持RTLD_DEEPBIND么?
试试dl_handle = dlopen(pLibraryName, RTLD_LAZY | RTLD_DEEPBIND);

论坛徽章:
0
6 [报告]
发表于 2013-03-28 16:11 |只看该作者
       RTLD_DEEPBIND (since glibc 2.3.4)
              Place the lookup scope of the symbols in this library ahead of the global scope.  This means that a self-contained
              library will use its own symbols in preference to global symbols with the same name contained  in  libraries  that
              have already been loaded.  This flag is not specified in POSIX.1-2001.

支持这个参数,我加上参数之后试过,还是不可以。

论坛徽章:
0
7 [报告]
发表于 2013-03-28 16:32 |只看该作者
问题很奇怪,我用dlopen加载函数调用,结果就不正确,我把dlopen去掉,直接调用动态库的函数,结果就是正确的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP