Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指向函数指针的未定义引用_C_Dll_Linker_Function Pointers - Fatal编程技术网

C 指向函数指针的未定义引用

C 指向函数指针的未定义引用,c,dll,linker,function-pointers,C,Dll,Linker,Function Pointers,我不熟悉这个话题。我试图在我的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); //

我不熟悉这个话题。我试图在我的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

我正把头撞在墙上想弄明白。有什么帮助吗?

代码中是否有以下语句:

#include <dlfcn.h>  
#包括
您是否在链接语句中包含
-ldl
库>

如果从
dlopen()
返回的值为空,则调用
dlerror()
以获取结果错误消息

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

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


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

在哪里实现
func
?您确定知道自己在做什么吗?请提供一个示例并说明您想要完成的任务。.func的实现因不同的共享库而异。我正在构建一个shell,允许用户加载新插件并签出。。。强制转换通常以“另一种方式”完成:
func=(int(*)(char**))dlsym(…)