Использование библиотеки C++ в Linux (затмение)
Я написал библиотеку и хочу проверить это. Я написал следующую программу, но я получаю сообщение об ошибке от затмения.
#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);
}
Что случилось?
С уважением.
3 ответа
Решение
В C++ вам нужно следующее:
typedef double (*func)(char*);
func desk = reinterpret_cast<func>( dlsym(handle, "Apply"));
Вам нужно явно привести возвращаемое значение к dlsym(), оно возвращает void*, а desk не имеет тип void*. Как это:
desk = (double (*)(char*))dlsym(handle, "some_function");
В основном вам нужно применить приведение к возвращаемому значению dlsym при назначении его на рабочий стол. В этой статье они приводят void* return к своему указателю на функцию.
Посмотрите на эту статью.