zoukankan      html  css  js  c++  java
  • 记录一次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目录里.

  • 相关阅读:
    Light Bulb(三分)
    Turn the corner (三分)
    xmu1214: 购物
    Tempter of the Bone(dfs奇偶剪枝)
    Oh, my goddess(bfs)
    nyoj三个水杯(bfs)
    组合数(dfs)
    吝啬的国度(dfs+vector)
    Cube Stacking(并差集深度+结点个数)
    python之socketserver实现并发
  • 原文地址:https://www.cnblogs.com/Athrob/p/5786100.html
Copyright © 2011-2022 走看看