【问题标题】:Undefined reference to pointer to a function对指向函数的指针的未定义引用
【发布时间】:2015-11-16 14:50:15
【问题描述】:

我是这个话题的新手。我正在尝试在我的 c 代码中动态链接共享库,但出现错误...

undefined reference to `func'

我已经搜索了网络,但我找不到我的语法有什么问题......

void *handle;
int (*func)(char **);
handle = dlopen(argv[0], RTLD_LOCAL | RTLD_LAZY);
*(int **)&func = dlsym(handle, pluggin_method->FunctionName); //I might need to pass a string by first using strcpy
int func_ret_val = (func)(argv); //execute function

我正用头撞墙试图弄清楚这一点。有什么帮助吗?

【问题讨论】:

  • func的实现在哪里?
  • 你确定你知道你在做什么吗?请提供minimal reproducible example 并说明您想要完成的任务..
  • func 的实现因共享库不同而不同。我正在构建一个允许用户加载新插件的 shell
  • 铸造通常以“另一种方式”完成:func = (int (*)(char**)) dlsym(...);.

标签: c dll linker function-pointers


【解决方案1】:

代码有没有声明:

#include <dlfcn.h>  

您是否在链接语句中包含-ldl 库>

如果dlopen() 的返回值为NULL,则调用dlerror() 以获取生成的错误消息。

注意:dlopen() 加载库并返回库的“不透明”句柄,而不是指向实际函数的指针。

dlopen()调用成功后需要调用dlsym()获取函数在内存中的实际地址。

检查来自dlsym() (!=NULL) 的返回值以确保操作成功

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多