我写了一个库,想要测试它。我编写了以下程序,但是我收到了来自eclipse的错误消息。
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*desk)(char*);
char *error;
handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY);
if (!handle) {
fputs (dlerror(), stderr);
exit(1);
}
desk= dlsym(handle, "Apply"); // ERROR: cannot convert from 'void *' to 'double*(*)(char*)' for argument 1
if ((error = dlerror()) != NULL) {
fputs(error, stderr);
exit(1);
}
dlclose(handle);
}
有什么问题?
问候。
答案 0 :(得分:3)
在C ++中,您需要以下内容:
typedef double (*func)(char*);
func desk = reinterpret_cast<func>( dlsym(handle, "Apply"));
答案 1 :(得分:2)
你需要显式地转换dlsym()的返回值,它返回一个void *,desk不是void *类型。像这样:
desk = (double (*)(char*))dlsym(handle, "some_function");
答案 2 :(得分:0)
基本上,在将dlsym分配给桌面时,需要将强制转换应用于dlsym的返回值。在this article中,他们将void *返回到它们的函数指针。
请看this article。