代码之家  ›  专栏  ›  技术社区  ›  Adrian Hood Sr

无法在Qt之外运行Qt Creator GUI

  •  0
  • Adrian Hood Sr  · 技术社区  · 5 年前

    我从GITHUB下载C++代码,用机器学习来训练对象检测器。

    在基于Qt5.8.0(MSVC 2015,32位)的QtCreator 4.2.1中,我能够编译并运行代码。不幸的是,我无法运行这个程序。Qt Creator之外的exe。

    起初,我收到了一个错误

    "The program can't start because libgcc_s_dw2-1.dll is missing". 
    

    幸亏 QT The program can't start because libgcc_s_dw2-1.dll is missing ,通过添加

    "QMAKE_LFLAGS += -static" 
    

    去医院。专业文件。现在,当我运行它时

    "The application was unable to start correctly (0xc000007b). Click OK to close the application."  
    

    当使用Qt创建一个简单的应用程序时,会出现“Hello”错误。这让我相信我的安装有问题。

    根据本文的建议: https://stackoverflow.com/questions/12099117/32-bit-qt-application-on-win-7-x64-wont-run-but-runs-fine-from-qt-creator ,我曾经 依赖步行者 找出可能的原因。我只希望看到几个我可以跟进的项目。相反,我收到了一份近100人失踪的名单。dll文件。所有文件都是从

    "API-MS-WIN ###.DLL" or "EXT-MS ###.DLL" 
    

    其中####代表一些额外的文本字符,例如;

    "API-MS-WIN-SHCORE-STREAM-WINRT-L1-1-0.DLL" 
    

    我附上了一个样本输出。

    Screen Capture of Dependency Walkder

    另一个建议是复制过来

    libwinpthread-1.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll.   
    

    这也不管用。

    我的下一步行动就是简单地获得最新版本的QT,并祝一切顺利。我安装了基于At 5.12.0(MSVC 2015,32位)的Qt Creator 4.8.1。这一次,我甚至无法让代码在IDE中运行。我收到了1000多条错误信息!

    根据几页的建议,我补充道

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
    

    去医院。pro文件,它仍然无法编译。

    此外,我还验证了该应用程序是作为32位应用程序构建的。我运行的是64位Windows 10系统。

    如果有人想尝试一下,看看他们是否能创造一个工作环境。exe,这里是链接:github。com/clavicule/BBTag

    0 回复  |  直到 5 年前
        1
  •  2
  •   AlbertM    5 年前

    Qt提供了一个工具,可以将必要的DLL复制到可执行文件的文件夹中。

    这些工具被称为windeployqt。exe,并随Qt安装一起提供。对我来说,它位于 C:\Qt\5.9.1\msvc2015_64\bin\windeployqt.exe 。您必须查看安装路径,可能还需要查看msvc_32文件夹才能找到它。

    然后,进入包含可执行文件的文件夹,在命令提示符或powershell下执行 path\to\windeployqt.exe yourProgram.exe 它会自动将必要的dll文件复制到此文件夹。之后,你可以毫无问题地运行你的程序。

    可以找到该工具的官方文档 here .

    备选方案1:在开发过程中,您可以使用QtCreator,在运行程序时自动将路径添加到DLL中——如果部署程序,请确保包含这些路径!

    备选方案2:将所需DLL的路径添加到path变量中。这也不推荐,因为每个获得你的程序的人都必须这样做才能运行它。

        2
  •  1
  •   Adrian Hood Sr    5 年前

    我想出来了!我安装的Anaconda(数据科学和机器学习领域流行的Python发行版)就是罪魁祸首。

    发件人:@remy lebeau

    The application was unable to start correctly (0xc000007b)

    错误是:

    "The application was unable to start correctly (0xc000007b) ..." 
    

    是32位应用程序试图加载64位DLL的良好指示器。起初,这没有意义,因为我多次验证我使用的是32位版本的Qt。

    事实证明,64位版本的Anaconda的安装还包含许多用于PyQt5包的Qt5 DLL。由于此文件夹的路径位于我的c:\Qt路径之前。。。\bin文件夹,它被用于构建中,而不是与Qt一起安装的实际32位版本。这并不明显,因为我不知道PyQt5,所以我不知道它是与蟒蛇一起出现的。使用System Environment Variables(系统环境变量)接口对路径条目进行简单的重新排序,然后重新启动系统,就解决了这个问题。

    一线希望:我现在知道C++,设计GUI W/QT和PYQT5

    谢谢@albertmand和@jwernerny