C 无法调用指针以返回指针的函数
我遇到了一个奇怪的问题。 我有两个文件a.c和b.c,如下所示: b、 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
#包括
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");