在Linux中使用C ++库(eclipse)

时间:2009-06-05 14:47:51

标签: c++ c linux

我写了一个库,想要测试它。我编写了以下程序,但是我收到了来自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 个答案:

答案 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