C 无法调用指针以返回指针的函数

C 无法调用指针以返回指针的函数,c,pointers,function-pointers,C,Pointers,Function Pointers,我遇到了一个奇怪的问题。 我有两个文件a.c和b.c,如下所示: b、 c: #包括 int*foo(){ int*x; x=(int*)malloc(sizeof(int)); *x=4; 返回x; } 我使用gcc将b.c编译为b.so: $gcc-o b.so-共享-fpic a、 c: #包括 #包括 int main(){ void*hdl; hdl=dlopen(“./b.so”,RTLD_-LAZY); int*(*fn)(无效)); int*x; x=(*fn)(); fn=d

我遇到了一个奇怪的问题。 我有两个文件a.c和b.c,如下所示: b、 c:

#包括
int*foo(){
int*x;
x=(int*)malloc(sizeof(int));
*x=4;
返回x;
}
我使用gcc将b.c编译为b.so: $gcc-o b.so-共享-fpic

a、 c:

#包括
#包括
int main(){
void*hdl;
hdl=dlopen(“./b.so”,RTLD_-LAZY);
int*(*fn)(无效));
int*x;
x=(*fn)();
fn=dlsym(hdl,foo);
printf(“%d”,*x);
}
我使用gcc编译a.c:

$gcc-fpic-低密度脂蛋白a.c

现在,当我运行它时:

美元/年 分段故障

我错在哪里? 当b.c中的函数不返回指针时,此功能就可以工作


此外,我尝试使用dlerror()检查错误,但它没有报告任何错误。

通过检查,您在初始化它之前使用了
fn
。它还没有指向
foo
,也没有指向任何特定的内容,我怀疑结果行为是未定义的。

可能只是示例中的一个问题,但在您提供的代码中,您需要切换以下行:

 x = (*fn)();
fn = dlsym(hdl, "foo");

您没有找到符号并调用函数

当你做
x=(*fn)()时
它不从
b.c
调用函数
foo

必须首先将符号加载到函数指针中

  int *x;
  fn = dlsym(hdl, "foo");
  x = fn();
  printf("%d", *x);
上述措施应该有效

编辑:


dlopen、dlsym的示例程序可以在手册页信息中找到。这两行的顺序似乎不正确:

x = (*fn)();
fn = dlsym(hdl, "foo");

已初始化(或为其赋值),未定义。变量
fn
是在使用之前定义的。@Georg Fritzsche:Sie haben recht,danke。我使用了相同的源代码来学习如何生成.so文件并使用它们:)
  int *x;
  fn = dlsym(hdl, "foo");
  x = fn();
  printf("%d", *x);
x = (*fn)();
fn = dlsym(hdl, "foo");