QT中使用QMap导致该so无法被QLibrary加载

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)您想解决的具体问题,便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。

已经找到原因,静态变量只能在类外初始化