參考資訊:
https://stackoverflow.com/questions/29285546/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()取得失敗的原因