QT中使用QMap导致该so无法被QLibrary加载
问题描述:
在类中声明QMap类型静态变量,并且在方法中使用该变量时,这个类所在的so库,无法被动态加载
类的声明如下:
class PluginManager
{
public:
PluginManager();
public:
static IDevicePlugin* GetPlugin(QString type,QString deviceId);
private:
// static PluginManager* inst;
static void LoadPlugin(QString deviceLibName);
static void InitPlugin(QString type,IDevicePlugin &devicePlugin);
static QMap<QString, IDevicePlugin*> pluginMap1;
};
共有三个工程
1.主工程
2.DHSocket
3.DHCore
加载顺序如下:
主工程通过QLibrary.load加载DHSocket库,SHSocket依赖DHCore库
目前加载DHSocket库时报错 ,无法打开共享对象文件: 没有那个文件或目录
在DHCore库中PluginManager去掉QMap声明后正常
答
你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,便于技术专家团更好地理解问题,并给出解决方案。
您可以点击问题下方的【编辑】,进行补充修改问题。
答
已经找到原因,静态变量只能在类外初始化