我正在使用dlsym()
in并且我有一个问题,是否应该显式转换C
的返回值或者是否正确地隐式转换。dlsym()
这是功能:
double (*(compile)(void))(double x, double y)
{
if (system("scan-build clang -fPIC -shared -g -Wall -Werror -pedantic "
"-std=c11 -O0 -lm foo.c -o foo.so") != 0) {
exit(EXIT_FAILURE);
}
void *handle;
handle = dlopen("./foo.so", RTLD_LAZY);
if (!handle) {
printf("Failed to load foo.so: %s\n", dlerror());
exit(EXIT_FAILURE);
}
foo f;
f = (foo)dlsym(handle, "foo");
if (!f) {
printf("Failed to find symbol foo in foo.so: %s\n", dlerror());
exit(EXIT_FAILURE);
}
return f;
}
该函数compile()
不接受值并返回一个指向函数的指针,该函数将两个double
s 作为输入并返回一个双精度值。然后我设置了一个编译共享对象的系统调用foo.so
。然后我打开foo.so
. dlopen()
然后dlsym()
找到foo
并foo.so
返回一个类型的对象foo
,我在标题中定义为:
typedef double (*foo)(double, double);
我必须投dlsym()
吗?