LINUX加载共享库

来源:互联网 发布:js 跨域抓取html 编辑:程序博客网 时间:2024/06/16 02:09
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
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(160) | 评论(0) | 转发(0) |
0

上一篇:C++调用C

下一篇:GCC指定路径

相关热门文章
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • 彻底搞定C语言指针详解-完整版...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~