在Linux中使用dlsym
函數(shù)可以動態(tài)解析符號。以下是一個簡單的示例代碼:
#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
函數(shù)打開一個動態(tài)鏈接庫(libhello.so
),然后使用dlsym
函數(shù)獲取其中的符號(hello
函數(shù)),最后調(diào)用這個符號所代表的函數(shù)。
編譯該程序時需要鏈接dl
庫:
gcc -o dynamic_resolve dynamic_resolve.c -ldl
然后運行程序,會輸出Hello, World!
。