gpt4 book ai didi

c - 动态库函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:58 25 4
gpt4 key购买 nike

我有以下代码,它只是从当前目录加载库 test.so 并在该库中执行 version 函数。应该返回的是一个字符串。相反返回的是堆栈中的垃圾(可能是指针位置?)。有谁知道为什么以下代码会失败。

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

int main(int argc, char **argv){
void *handler;
char *(*version);
char *error;

handler = dlopen("./test.so", RTLD_LAZY);
if(!handler){
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}

dlerror(); //Flushes any existing error

*(void **)(&version) = dlsym(handler, "version");

if((error = dlerror()) != NULL){
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
printf("%s\n", version);
dlclose(handler);
exit(EXIT_SUCCESS);
}

最佳答案

更改声明:

char *(*version); // this is not a function pointer

到:

char *(*version)(); // but this is

然后,更改行:

printf("%s\n", version);

到:

printf("%s\n", version());

关于c - 动态库函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10374578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com