记录一次Qt5程序无法运行的解决过程

上几天在V站逛的时候看到某作者出了个截图工具(snipaste)很是强大.

可下载后就是打不开, 工具是Qt5写的, 提示我无法加载qwindows.dll, 这个dll明确在platforms目录里放着的.

谷歌一通后发现Qt的社区有个帖子也是这样, 那人用Dependency Walker列出了程序加载的dll, 而且其中一个dll路径明显是本机某个特殊路径.

我在想是不是因为我安装了Qt的SDK的原因.经过Dependency Walker查看, 果然是.

本来该加载应用程序目录下的qwindows.dll, 结果加载到我的SDK里去了, 因为SDK是用VS2013编译的, 而这个截图工具是VS2015编译的, 可能DLL之间不兼容所以才加载失败.

为什么会加载到我的SDK里去呢, 因为我在系统的环境变量里设置了一个QT_PLUGIN_PATH这样的变量, Qt在加载时就优先加载我这个环境变量指定的路径了.

我把环境变量改名后工具就正常运行起来了.

下面截图都是这个工具截的, 很强大.

那怎样才能避免这种情况发生呢?

以下是猜测并没有实际验证, 请测试后再使用. 哪天有空测试了, 再来修改这篇文章.

查看Qt5的文档(http://doc.qt.io/qt-5/qcoreapplication.html#addLibraryPath)发现有下面这个方法:

void QCoreApplication::addLibraryPath(const QString &path);

在程序的main方法里面一开始先调用一下这个方法, 将程序当前目录或者程序当前目录下的plugins目录加进去应该就会优先读取了.

之前Qt4的插件都是部署在plugins目录里, 现在Qt5.7不知道怎么部署了, 看情况是直接部署在程序根目录下, 不用非挪到plugins目录里.

原文地址:https://www.cnblogs.com/Athrob/p/5786100.html