我正在使用QPluginLoader使用Qt插件框架构建QT应用程序。
我已经构建了一个插件,但框架无法加载插件。我的插件依赖于第三方shlib(log4qt)。
文件已正确识别,但加载文件失败(这立即让我怀疑缺少依赖项)。
我在shlib上运行ldd,在输出中,这是唯一丢失的文件:
liblog4qt.so.1 =>找不到
我已尝试以下方法解决问题:
以上所有内容与巧克力防火手一样多用。
以下是我加载插件的方法。这里没什么不合时宜的......
// 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"
有谁知道为什么我的插件库没有加载?
[[其他信息]]