Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1507822
  • 博文数量: 487
  • 博客积分: 161
  • 博客等级: 入伍新兵
  • 技术积分: 5064
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-01 07:37
个人简介

只有偏执狂才能生存

文章分类

全部博文(487)

文章存档

2016年(10)

2015年(111)

2014年(66)

2013年(272)

2012年(28)

分类: LINUX

2013-04-14 10:03:44

动态库 life,使用了主程序中的symbol,day.

gcc -shared -o life life.c

------------------------------------

#include
#include
#include

int day (int a);
int life(int a)
{
    return day(a)+8;
}

 

主程序,注意 使用了 -rdynamic选项。 这样就没有问题。

如果不加-rdynamic选项,则会在运行时报 ./life: undefined symbol: day

gcc -rdynamic -o foo foo2.c -ldl

-----------------------------------------

#include
#include
#include

int day(int a)
{
    printf("this is day function/n");
    return a+2;
}

int main(int argc, char **argv) {
    void *handle1, *handle2;
    int (*life)(int a);
    char *error;
    handle2 = dlopen ("./life", RTLD_LAZY);
    if (!handle2) {
        fprintf (stderr, "%s/n", dlerror());
        exit(1);
    }
    dlerror();    /* Clear any existing error */
    life  = dlsym(handle2, "life");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s/n", error);
        exit(1);
    }
    printf("%d/n", life(1));
    dlclose(handle2);
    return 0;
}

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