嗨,我动态加载函数并执行它们。我希望能够定义一个通用返回类型,以便编译器可以正确清理堆栈。目前它的版本字符串打印乱码。
如何使以下代码工作?
// gcc -o test test.c -ldl
#include <stdio.h>
#include <dlfcn.h>
typedef union { int i; double d; float f; char *p;} anytype;
int main()
{
anytype ver2;
anytype (*f)();
void *handle = dlopen("libz.so.1", RTLD_NOW|RTLD_GLOBAL);
f = dlsym(handle,"zlibVersion");
//const char * zlibVersion (void);
ver2=f();
printf("zlib version %s\n", ver2.p);
dlclose(handle);
return 0;
}