Linux系统下调用依赖库.so文件(用于创建窗口),使用dlopen,导致窗口无限加载
QMap
ZRLIBRARY_EXPORT DLL_FUNCTION GetDLLFunByName(string dllName, string funName)
{
string dll_path = LIBPATH + dllName;
void *handle;
if(dllmap.contains(dll_path))
{
handle=dllmap.value(dll_path);
}
else
{
handle = dlopen (dll_path.c_str(), RTLD_LAZY);
if (!handle)
{
return NULL;
}
dllmap.insert(dll_path,handle);
}
DLL_FUNCTION dllFun = (DLL_FUNCTION)dlsym(handle,funName.c_str());
return dllFun;
}
调用的.so(创建窗口)文件无限加载,窗口无限加载,程序异常退出
使用diclose函数,没有作用
窗口仅加载一次
无限加载是什么意思?是指你的程序里有一个循环一直调用这个函数?还是指对于同一个so文件调用这个函数,每次都调用dlopen来打开?
另外,全局变量可以考虑使用Q_GLOBAL_STATIC()宏来定义
https://doc.qt.io/qt-6/qglobalstatic.html#Q_GLOBAL_STATIC