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" 

私のプラグインライブラリがロードされていない理由を誰か知っていますか?

[[追加情報]]

  • OS: Ubuntu 12.0.4 LTS
  • gcc: 4.6.3
  • QT: 4.8.1
  • QTクリエーター: 2.4.1
4

0 に答える 0