void* dlsym(void* handle, const char* symbol)
1.0、参考
1.1、此函数的作用

获得symbol对应的地址。

1.2、参数说明

void* handledlopen函数的返回值。

const char* symbol是符号(变量名、函数名)。

1.3、返回值说明

返回symbol对应的地址。

1.4、使用示例

step1、编写一个C源程序add.c,其内容如下

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

step2、使用gcc命令将add.c编译为动态库

gcc -shared -fPIC -o libadd.so add.c

step3、编写一个C源程序main.c,其内容如下

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

int main(int argc, char* argv[]) {
    if (1 == argc) {
        perror("please provide a library path");
        return 1;
    }

    void* handle = dlopen(argc[1], RTLD_LAZY);
    if (NULL == handle) {
        printf("load %s error, %s\n", argc[1], dlerror());
        return 1;
    }
    printf("load %s success.\n", argc[1]);

    int (*add)(int a, int b);
    add = dlsym(handle, "add");
    int value = add(2, 3);
    printf("add(2, 3) = %d\n", value);

    int statusCode = dlclose(handle);
    printf("unload %s %s!\n", argc[1], statusCode ? "failed" : "success");
    return statusCode;
}

step4、使用gcc命令将mian.c编译为可执行文件

gcc -o main main.c

step5、运行main可执行文件

./main libadd.so

运行结果如下:

load libadd.so success.
add(2, 3) = 5
unload libadd.so success.
source code on GitHub