这个程序将加载libtest.so共享库,并使用dlsym函数获取add函数的地址,然后调用add函数,最后关闭共享库。


#include <stdio.h>




int add(int a,int b){
    return a+b;
}


int fun() {


printf("ADB\n");
}

保存为libtest.c 

编译

gcc -shared -o libtest.so libtest.c

编写一个使用dlopen系列函数的C程序,比如main.c:

// main.c
#include <stdio.h>
#include <dlfcn.h>


int main() {
    // 打开共享库
    void* handle = dlopen("./libtest.so", RTLD_LAZY);


    if (!handle) {
        fprintf(stderr, "Error: %s\n", dlerror());
        return 1;
    }


    // 获取add函数的地址
    typedef int (*AddFunction)(int, int);
    AddFunction add = (AddFunction)dlsym(handle, "add");


    if (!add) {
        fprintf(stderr, "Error: %s\n", dlerror());
        dlclose(handle);
        return 1;
    }


    // 使用add函数
    int result = add(3, 4);
    printf("Result: %d\n", result);


    // 关闭共享库
    dlclose(handle);


    return 0;
}


编译

gcc -o main main.c