c++ | 动态链接库 | 小结

//环境 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 

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”)执行成功

你可能感兴趣的:(c++,开发语言)