// file : add.c int add(int a, int b) { return a+b; }; // cmd: gcc -fPIC -shared -o libadd.so add.c // 编译生成动态库文件 // file : demo.c #include <stdio.h> #include <stdlib.h> // EXIT_FAILURE #include <dlfcn.h> // dlopen, dlerror, dlsym, dlclose typedef int(* FUNC_ADD)(int, int); // 定义函数指针类型的别名 const char* dllPath = "./libadd.so"; int main() { void* handle = dlopen( dllPath, RTLD_LAZY ); if( !handle ) { fprintf( stderr, "[%s](%d) dlopen get error: %s ", __FILE__, __LINE__, dlerror() ); exit( EXIT_FAILURE ); } do{ // for resource handle FUNC_ADD add_func = (FUNC_ADD)dlsym( handle, "add" ); printf( "1 add 2 is %d ", add_func(1,2) ); }while(0); // for resource handle dlclose( handle ); } // cmd : gcc -o demo demo.c -ldl; ./demo // output: 1 add 2 is 3