在Linux中使用dlsym
函数可以动态解析符号。以下是一个简单的示例代码:
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *handle;
void (*hello)();
handle = dlopen("./libhello.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
hello = dlsym(handle, "hello");
if (!hello) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
(*hello)();
dlclose(handle);
return 0;
}
在这个示例中,首先通过dlopen
函数打开一个动态链接库(libhello.so
),然后使用dlsym
函数获取其中的符号(hello
函数),最后调用这个符号所代表的函数。
编译该程序时需要链接dl
库:
gcc -o dynamic_resolve dynamic_resolve.c -ldl
然后运行程序,会输出Hello, World!
。