0

我正在使用 QPluginLoader 构建一个 QT 应用程序,使用 Qt 插件框架。

我已经构建了一个插件,但框架无法加载插件。我的插件依赖于第三方 shlib (log4qt)。

该文件已正确识别,但加载文件失败(这立即让我怀疑缺少依赖项)。

我在 shlib 上运行 ldd,在输出中,这是唯一丢失的文件:

liblog4qt.so.1 => 未找到

我尝试了以下方法来解决问题:

  1. 使用 QApplication::addtLibraryPath("liblog4qt.*)
  2. 编辑 /etc/ld.conf 以手动添加库位置和刷新缓存
  3. 将所有 liblog4qt* 文件复制到我的插件目录中

以上所有这些都与巧克力防火板一样有用。

这是我加载插件的方式。这里没有什么不寻常的......

// Private methods
void MyApp::loadPlugins()
{
    //QString path = QApplication::applicationDirPath();

    QDir plugins_dir(".");

#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
    QString pdirname = plugins_dir.dirName().toLower();

    #if defined(Q_OS_WIN)
    if (dirname == "debug") || (dirname="release")
        plugins_dir.cdUp();

    #elif defined(Q_OS_MAC)
    if (dirname == "macos")
    {
        plugins_dir.cdUp();
        plugins_dir.cdUp();
        plugins_dir.cdUp();
    }
    #endif
#endif

    plugins_dir.cd("bin/plugins");

    foreach(QString filename, plugins_dir.entryList(QDir::Files))
    {
        qDebug() << "Filename: " << filename;

        if (!filename.toLower().contains("plugin"))
            continue;

        qDebug() << "Attempting to load: " << plugins_dir.absoluteFilePath(filename);

        QPluginLoader plugin_loader(plugins_dir.absoluteFilePath(filename));

        QString problem = plugin_loader.errorString();
        qDebug() <<  "Plugin load problem: " << problem;

        QObject * plugin = plugin_loader.instance();

        if (plugin)
        {
            PluginInterface * iplugin = qobject_cast<PluginInterface *>(plugin);

            if (iplugin) {
                /* do something useful */
            }
        }
    }
}

这是控制台输出的(相关部分):

14-09-27 15:50:42.SSS [DEBUG] Qt: - Attempting to load:  "/path/to//main/bin/plugins/libplugin001.so" 
14-09-27 15:51:33.SSS [DEBUG] Qt: - Plugin load problem:  "Unknown error" 
14-09-27 15:51:53.SSS [DEBUG] Qt: - Attempting to load:  "/path/to//main/bin/plugins/libplugin001.so.1" 
14-09-27 15:51:53.SSS [DEBUG] Qt: - Plugin load problem:  "Unknown error" 
14-09-27 15:51:55.SSS [DEBUG] Qt: - Attempting to load:  "/path/to//main/bin/plugins/libplugin001.so.1.0" 
14-09-27 15:51:55.SSS [DEBUG] Qt: - Plugin load problem:  "Unknown error" 
14-09-27 15:51:57.SSS [DEBUG] Qt: - Attempting to load:  "/path/to//main/bin/plugins/libplugin001.so.1.0.0" 
14-09-27 15:51:57.SSS [DEBUG] Qt: - Plugin load problem:  "Unknown error" 

有谁知道为什么我的插件库没有被加载?

[[附加信息]]

  • 操作系统:Ubuntu 12.0.4 LTS
  • 海湾合作委员会:4.6.3
  • QT:4.8.1
  • QT 创建者:2.4.1
4

0 回答 0