dlopen / dlsym:获取函数指针时出错

时间:2014-03-21 14:06:53

标签: dynamic-linking dlopen dlsym

我试图通过使用dlopen和dlsym来获取函数指针,但是我无法让它正常工作。尝试执行dlsym调用时失败。以下是我的代码。

请帮忙吗?

#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>

int test() {
    printf("%s", "test()");
    return 123;
}

int main() {
    char * functionname = "test";
    void* handle = dlopen(NULL,RTLD_LAZY|RTLD_GLOBAL);
    if (!handle) {
        fprintf(stderr, "Couldn't open handle: %s\n",
            dlerror());
        exit(1);
    }

    int (*fun)() = (int (*)())dlsym(handle, functionname);
    if (fun == NULL) { 
        fprintf(stderr, "Couldn't find function: %s\n",functionname); 
        exit(1);
    }
    int a = fun();
    printf("result: %d \n", a);
}

1 个答案:

答案 0 :(得分:5)

您可能需要指定链接器将符号导出为动态符号。使用gcc,您必须使用-rdynamic

您可以使用objdump -T检查导出的动态符号。