Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474986
  • 博文数量: 112
  • 博客积分: 2436
  • 博客等级: 大尉
  • 技术积分: 2769
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-04 19:48
文章分类

全部博文(112)

文章存档

2013年(7)

2012年(105)

分类: C/C++

2012-03-22 14:53:44


点击(此处)折叠或打开

  1. #Makefile

  2. all:
  3.     gcc -shared -fPIC sub.c add.c -o libmath.so
  4.     gcc main.c -o main -ldl
  5. clean:
  6.     rm main libmath.so
  7. .PHONY:clean all

点击(此处)折叠或打开

  1. //add.c

  2. int add(int a, int b)
  3. {
  4.     return a + b;
  5. }

点击(此处)折叠或打开

  1. //sub.c

  2. int sub(int a, int b)
  3. {
  4.     return a - b;
  5. }

点击(此处)折叠或打开

  1. //main.c

  2. #include <stdio.h>
  3. #include "math.h"
  4. #include <dlfcn.h>
  5. #include <stdlib.h>

  6. typedef int (*funcp_t)(int, int);

  7. int main(void)
  8. {
  9.     void *handle;
  10.     funcp_t fun;

  11.     handle = dlopen("libmath.so", RTLD_NOW);
  12.     fun = dlsym(handle, "sub");

  13.     if(handle == NULL || fun == NULL)
  14.     {
  15.         printf("not find libmath.so\n");
  16.         exit(EXIT_FAILURE);
  17.     }

  18.     printf("sub: %d\n", fun(3, 5));

  19.     dlclose(handle);

  20.     return 0;
  21.     
  22. }

阅读(1394) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~