//.h #pragma once #if __cplusplus extern "C"{//必须加,因C++会对name进行重新命名 **add** #endif int add(const int &numa,const int &numb); #if __cplusplus } #endif //.cpp #include"dltest.h" int myadd(const int &numa,const int &numb) { return numa+numb; } g++ -fPIC -shared dltest.cpp -o libdltest.so //.main #include<dlfcn.h> #include<iostream> using namespace std; typedef int(*Func)(const int&,const int&); int main() { void *handle=dlopen("/data/home/libdltest.so",RTLD_NOW); char *error; dlerror(); Func func=(Func)dlsym(handle,"myadd"); if((error=dlerror())!=NULL) { cout<<"error:"<<error<<endl; return -1; } int a=1,b=2; int c=func(a,b); cout<<c; dlclose(handle); } g++ -g main.cpp -o main -ldl 正常情况下 保证 .so 能被 main 找到,就可以了 但粗心的孩子 可能存在 声明和实现不一致的情况,尤其是 形参 少了或者多了个const
参考教程:http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html#DL-LIBRARY-EXAMPLE
感谢原作者