GNU >> C/C++

dlopen、dlsym、dlclose


參考資訊:
1. when-do-so-files-get-loaded-linux

dl.c

#include <stdio.h>

void hello(void)
{
    printf("hello, world!\n");
}

main.c

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

typedef void hello(void);

int main(int argc, char **argv)
{
    void* h = dlopen("./hello.so", RTLD_NOW);
    hello *p = dlsym(h, "hello");
    p();
    dlclose(h);
    return 0;
}

編譯、執行

$ gcc dl.c -shared -o hello.so
$ gcc main.c -o main -ldl
$ ./main
    hello, world!

P.S. 當執行dlopen()失敗時,可以呼叫dlerror()取得失敗的原因


返回上一頁