//环境 linux c++
//生成动态链接库
//然后调用动态链接库中的函数
//出现的问题以及解决
//注意在win和在linux中调用动态链接库的函数是不一样的
//在要生成链接库的cpp文件中比如以后要调用本文件中的某个函数,需要extern "c" 把你定的函数“再封装”避免重载出现的一些问题
//举个实例吧
extern "c" void sum(int x, double y);
void sum(int x, double y){
std::cout<<(int) x + y<<std::endl;
}
#生成动态链接库libxxx.so 注意哈 在链接的时候,g++ 会把链接为libxxx.so--> lxxx 不好描述
g++ -fPIC -shared xxx.cpp -o libxxx.so
#include <dlfcn.h>
typedef bool (*Function)(int, double);
Function exFunction = NULL;
//类似初始化
void* libHandle = dlopen("./lxxx.so", RTLD_LAZY);
//这里还要做判断,是否初始化成功
exFunction = (Function )(dlsym(libHandle, "sum"));
//调用链接库中的函数
exFunction (4, 5.5);
//释放资源
dlclose(libHandle);
#当重载多个函数,可能自己弄晕了,可以用下面的命令去找生成动态链接库后你的那个sum函数的函数符是什么,也就是说
#exFunction = (Function )(dlsym(libHandle, "sum"));中的sum 就是下面命令的输出结果
nm -D libext_curl.so | grep sum
参照如下
在这里插入图片描述
像第一个结果,如果我填入的是dlsym(libHandle, “GET”)会报错
如果这样写dlsym(libHandle, “Z3GETRSsS”)执行成功