动态库加载函数dlsym

dlsym

        dlsym 是一个用于动态链接库(Dynamic Linking Library)的函数,它允许程序在运行时获取动态链接库中符号(如函数、变量等)的地址。

头文件和函数原型
#include 
void *dlsym(void *handle, const char *symbol);
具体代码 
#include 
#include 
#define __USE_GNU     //使用RTLD_DEFAULT和RTLD_NEXT宏需定义
#include 
 
typedef size_t (*strlen_t)(const char *); 
strlen_t strlen_f = NULL, strlen_f1 = NULL;
 
size_t strlen(const char *str)
{
    printf("%s strlen\n", __FILE__);
    return strlen_f1(str);
}
 
int main(int argc, char **argv)
{
    strlen_f = dlsym(RTLD_DEFAULT, "strlen");  
    //获取到的是当前文件中函数符号strlen的地址
    if(!strlen_f) {
        printf("default load error %s\n", dlerror());
        return 1;
    }   
    strlen_f1 = dlsym(RTLD_NEXT, "strlen");
    //获取到的是当前库后的系统库中函数符号strlen的地址
    if(!strlen_f1) {
        printf("next load error %s\n", dlerror());
        return 1;
    }   
    printf("strlen is %p\n", strlen);
    printf("strlen_f is %p\n", strlen_f);
    printf("strlen_f1 is %p\n", strlen_f1);
    printf("strlen_f is %ld\n", strlen_f("xuedaon")); //调用当前文件中的函数strlen
    printf("=>>>>>>>>>> <<<<<<<<<<<=\n");
    printf("strlen_f1 is %ld\n", strlen_f1("xuedaon"));  //相当于调用系统库函数strlen
    return 0;
}

编译执行

动态库加载函数dlsym_第1张图片

你可能感兴趣的:(c++,dylsm,知识分享)