我正在使用 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"
有谁知道为什么我的插件库没有被加载?
[[附加信息]]
- 操作系统:Ubuntu 12.0.4 LTS
- 海湾合作委员会:4.6.3
- QT:4.8.1
- QT 创建者:2.4.1