dlsym无法获取函数地址

func_ptr get_function_address(char* func_name) {
    // 获取当前进程中的函数地址
    void * handle = dlopen (NULL, RTLD_LAZY | RTLD_LOCAL);
    void (*foop) (void*);
    if (handle == NULL)
    {
        printf ("dlopen [local] (NULL): %s\n", dlerror ());
        dlclose(handle);
        return NULL;
    }
    /* Make sure we can get at the previously loaded module's symbols
        via this handle too.  */
    foop = dlsym (handle, func_name);
    if (foop == NULL)
    {
      printf ("dlsym [local] (foo): %s\n", dlerror ());
      dlclose(handle);
      return NULL;
    }

    dlclose(handle);
    return foop;
}

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 编译通过,但使用时,获取到的函数指针为NULL;

nm -g可以查找到该函数。

解决:gcc编译时加上 -rdynamic选项

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值