Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1467591
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: C/C++

2013-03-16 11:33:06

1. 创建共享库
$ gcc -fPIC -shared util.c -o libutil.so

2.测试代码

  1. #include <dlfcn.h>
  2. /*
  3.  *
  4.  * int get_num_test();
  5.  * 被调用的函数原型
  6.  *
  7.  */

  8. /* 针对函数原型定义函数指针,并用宏封装 */
  9. typedef int (*get_num_test)();
  10. #define FUNC_GET_NUM get_num_test

  11. /* 函数名 */
  12. #define FUNC_NAME_GET_NUM "get_num_test"

  13. /* 全局 */
  14. FUNC_GET_NUM myfunc;

  15. void lib_so_test(void)
  16. {
  17.     char *error;
  18.     void *handler;
  19.     /* 加载 */
  20.     handler = dlopen("./libutil.so", RTLD_NOW);
  21.     if ( handler == NULL )
  22.     {
  23.         fprintf(stderr, "%s\n", dlerror());
  24.         exit( -1 );
  25.     }
  26.     error = dlerror();/* 清空错误信息,避免影响dlsym */
  27.     /* 获取函数地址 */
  28.     myfunc = dlsym(handler, FUNC_NAME_GET_NUM);
  29.     error = dlerror();
  30.     if ( error != NULL )
  31.     {
  32.         fprintf(stderr, "%s\n", dlerror());
  33.         exit( -1 );
  34.     }

  35.     /* 调用 */
  36.     myfunc();

  37.     /* 关闭动态库 */
  38.     dlclose(handler);
  39. }
3.编译时加上-ldl,否则提示dlopen等未定义
$ gcc main.c -ldl
阅读(573) | 评论(0) | 转发(0) |
0

上一篇:C++调用C

下一篇:GCC指定路径

给主人留下些什么吧!~~