Использование библиотеки C ++ в Linux (затмение) - PullRequest
1 голос
/ 05 июня 2009

Я написал библиотеку и хочу проверить ее. Я написал следующую программу, но получаю сообщение об ошибке от 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);
}

Что не так?

С уважением.

Ответы [ 3 ]

3 голосов
/ 05 июня 2009

В C ++ вам нужно следующее:


typedef double (*func)(char*);
func desk = reinterpret_cast<func>( dlsym(handle, "Apply"));
2 голосов
/ 05 июня 2009

Вам необходимо явным образом привести возвращаемое значение dlsym (), оно возвращает void *, а desk не имеет тип void *. Как это:

desk = (double (*)(char*))dlsym(handle, "some_function");

0 голосов
/ 05 июня 2009

В основном вам необходимо применить приведение к возвращаемому значению dlsym при назначении его на рабочий стол. В этой статье они приводят void * к своему указателю на функцию.

Посмотрите на эту статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...