免费注册 查看新帖 |

Chinaunix

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

请教大家一个调用so动态库的问题 [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-16 14:56 |只看该作者 |倒序浏览
情况如下:
    我自己编写了一个libtest.so,然后写了一个简单的测试程序:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <dlfcn.h>
  5. int main()
  6. {
  7. printf("-----for test begin-----\n");
  8.     unsigned long int handle = 2;
  9.     void *dp = dlopen("/lib/libtest.so", RTLD_LAZY);
  10.                
  11.     char *pszErr = dlerror();
  12.     if( !dp || pszErr )
  13.     {
  14. printf("Load libtest.so failed!\n");
  15.         return 1;
  16.     }

  17.     int (*File_Open)(unsigned long int*,int) = dlsym(dp, "File_Open");
  18.     int ret = File_Open(&handle,0);

  19. printf("ret = %d\n",ret);
  20. printf("handle = %d\n",handle);

  21.     dlclose(dp);

  22. printf("-----for test end-----\n");

  23.     return 0;
  24. }
复制代码
gcc -o test test.c -ldl

生成test可执行文件,下载到目标板后运行,打印-----for test end-----后出现segmentation fault,
注释掉“dlclose(dp);”segmentation fault未出现,个人感觉很奇怪,如果dlclose()调用引起的
segmentation fault那应该不打印-----for test end-----啊,但注释掉就没问题了,搞不懂啊!

论坛徽章:
0
2 [报告]
发表于 2011-02-16 15:19 |只看该作者
检查下open有没有错?

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
3 [报告]
发表于 2011-02-16 15:21 |只看该作者
难道我的glibc对dlclose支持的不够好?
没有遇到同样问题的战友?

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
4 [报告]
发表于 2011-02-16 17:04 |只看该作者
回复 2# ww2000e


    dlopen没有问题啦。
   在一些英文邮件列表中有看到相同问题,可惜没看到解决方法,唉

论坛徽章:
3
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29
5 [报告]
发表于 2011-02-17 19:06 |只看该作者
gcc -o test test.c -ldl

这样编译可以下载到目标机上运行吗?
目标机上的bin文件,.so文件都需要交叉编译。

不过段错误,一般是内存越界之类,你可以现在pc上测试,测试OK后在移植到目标板上运行。

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
6 [报告]
发表于 2011-02-18 09:29 |只看该作者
回复 5# liugang9931706


    写错了,不是gcc,呵呵,关键是main函数执行完才出现段错误,我把main函数删的只剩下dlopen和dlclose两行也会段错误,注释掉dlclose就没有了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP