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目录里.

  • 相关阅读:
    [MTG][介绍]企业消息处理平台
    [MYSQL][TIP]入门级命令
    [JWF][API] 显示当前所有用户信息
    五一去了五里河公园
    [UML][Feel]活动图的建立
    [JWF][DOC] COM Object Library Reference
    计算机网络操作系统历年试题
    embed标签的使用
    Android初体验D2
    ScrollJquery列表无间隙滚动
  • 原文地址:https://www.cnblogs.com/Athrob/p/5786100.html
Copyright © 2011-2022 走看看