QPluginLoader を使用して、Qt プラグイン フレームワークを使用して QT アプリケーションを構築しています。
プラグインをビルドしましたが、フレームワークがプラグインをロードできません。私のプラグインは、サードパーティの shlib (log4qt) に依存しています。
ファイルは正しく識別されますが、ファイルのロードは失敗します (これにより、すぐに依存関係の欠落が疑われました)。
shlib で ldd を実行すると、出力では、これが唯一の不足しているファイルです。
liblog4qt.so.1 => 見つかりません
問題を解決するために次のことを試しました。
- QApplication::addtLibraryPath("liblog4qt へのパス。*) の使用
- /etc/ld.conf を編集して、ライブラリの場所と更新されたキャッシュを手動で追加しました
- すべての 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