Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在win7 32位上部署Qt应用程序-在win7 x64上工作(并编译)_Windows_Qt_Visual C++_Visual Studio 2012_Deployment - Fatal编程技术网

Windows 在win7 32位上部署Qt应用程序-在win7 x64上工作(并编译)

Windows 在win7 32位上部署Qt应用程序-在win7 x64上工作(并编译),windows,qt,visual-c++,visual-studio-2012,deployment,Windows,Qt,Visual C++,Visual Studio 2012,Deployment,嗯,我花了一天时间寻找解决方案,并且已经阅读了所有内容,但是我无法部署我的Qt应用程序,所以我决定询问 我通过Visual Studio加载项VS 2013 Ultimate使用Qt 5.2.1,Qt版本是msvcr2012。我有Qt5.2的x86版本(现在是Qt下载页面底部的第三个版本) 我的目标是32位的Win7 我的操作系统是Windows7 64位操作系统,我正在为win32,release/o2(最高速度)优化,/MD(动态C运行时),构建应用程序,并链接库: qtmain.lib Q

嗯,我花了一天时间寻找解决方案,并且已经阅读了所有内容,但是我无法部署我的Qt应用程序,所以我决定询问

我通过Visual Studio加载项VS 2013 Ultimate使用Qt 5.2.1,Qt版本是msvcr2012。我有Qt5.2的x86版本(现在是Qt下载页面底部的第三个版本)

我的目标是32位的Win7

我的操作系统是Windows7 64位操作系统,我正在为
win32
release
/o2(最高速度)
优化,
/MD(动态C运行时)
,构建应用程序,并链接库:

qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
Qt5PlatformSupport.lib //this one is added by me, the others are automatically set with the Qt-AddIn template.
我构建了它,并将以下内容放在发布文件夹中:

编辑:由于编译器的版本,我还分发了vs2012 dll.s,如您所见

.../release                                            /plugins        /platforms

我已设置了附加库路径(仅为100%找到它们的机会):

我已经根据在Visual Studio中调试应用程序时加载的.dll-s复制了.dll-s。Dependes.exe和调试之间的唯一区别是,在VS系统中,dll-s是从SysWOW64加载的,而不是从system32加载的

在我的(开发人员)pc上运行所有这些功能时不会出现任何错误,但在测试(在Microsoft虚拟pc上运行Win32-bit)pc上,我会遇到“臭名昭著”的错误:

Failed to load platform plugin “windows”. Available platforms are:
(and here there are the full pathes to the .dll-s, 
eg: D:\cproj\keygen\win32\Release\plugins\platforms\qwindows.dll, so it must have found them.
我也跟着说:。
重命名Qt dir后,控制台仅将release文件夹作为库输入输出(不像我的第一次测试那样输出Qt文件夹)。它从应用程序文件夹中加载dll-s,启动良好。但是,在我的虚拟PC上,或在我兄弟的pac(Win7 32位)上,它给了我一个错误。ˇ关于这一点的图片:

如何在32位机器上运行它?我在每一次构建中都尝试过,发布版本为win32,调试版本为win32,但都不起作用。我不能在更多的机器上测试它,在XP上它甚至不能加载C运行时,但这不是目标平台

欲了解更多信息,请发表评论


编辑:目标pc上的Dependency walker显示的与开发pc上的相同。它仍然可以找到插件,但无法加载。

我不知道你为什么要费心设置路径等。你链接的Qt wiki文章显示,你没有
插件
文件夹,但该文件夹中的所有内容都应该放在可执行文件的文件夹中

他们给出的建议非常简单:

  • Qt的
    bin
    目录中的每个
    .dll
    都需要复制到可执行文件的文件夹中

  • Qt的
    插件
    qml
    文件夹中的所有内容(文件和文件夹)都需要复制到可执行文件的文件夹中

  • 然后,您可以将其缩减为不使用的模块。对我有用,很好


    说“我必须将.dll-s添加到发布版本中,因为我没有使用商业版本”也是不正确的。如果你愿意的话,你可以很容易地用Qt5和MSVC2012构建静态链接的可执行文件,我甚至还详细介绍了如何将所有这些都用于WindowsXP。你可以在LGPL的条件下做得很好,你只需要让你的用户重新开始你的项目(这并不意味着放弃C++源代码)。

    < P>问题不是插件,但它也要求VS2010重新拨号。
    在我尝试了所有我在Qt文件夹中找到的东西之后,我试着运行我的应用程序并安装它。现在它也在虚拟PC上运行,但是,它没有在依赖项中列出(或者我监督了它)。它只列出了2012年和2013年的版本。

    “我知道,即使它们是‘静态’库”,这些被称为。感谢您澄清这一点。这是一个我没有完全理解的问题。部署任何静态链接的东西都是一个糟糕的主意。不起作用,与前一个一样。当我在PC(win7 x64)上运行时,它会找到此文件夹中的所有内容,但在虚拟机或另一台win7 x86上,它也会在那里找到它们,只是无法加载。@user3427419为什么?它允许大量的全局优化,并产生一个单一的可执行文件,总的来说,它比动态链接的可执行文件要小,它旁边有所有的依赖项。在Windows上,这几乎是必须的,除非你喜欢臃肿的安装程序。任何人都不太可能运行其他二进制兼容版本的Qt,以便共享DLL。当然,在带有包管理器的Unix系统上,情况完全不同——除非您想阻止一些反向工程;然后静态链接仍然是个好主意。我终于解决了。检查我的答案,谢谢你的回答!关于静态链接,首先是安全性。如果您使用静态链接,用户不容易在第三方代码(如Qt、webkit、openssl或其他库(如MSVC运行时))中修补关键问题。见鬼,更糟糕的是,他们很可能甚至无法知道问题的存在!至于性能,这不是一个长期不使用动态链接的有效理由。关于大小,带有webkit、runtime redist和openssl的Qt应用程序的安装程序低于10MB。在上面提到的安全隐患上争论几MB的磁盘空间是不值得的。你似乎把事情搞得一团糟。我现在注意到,在问题中,您声称“Visual Studio插件VS 2013 Ultimate,qt版本为msvcr2012”。你绝对不能把为一个msvc构建的qt与另一个msvc混合。如果您使用的是针对MSVC2012的预构建Qt,那么除了MSVC2012之外,它将无法正常工作。您似乎需要MSVC2010可再发行文件来运行msvc2012的Qt,这一事实表明,有些地方出了严重的问题。您应该只需要用于编译Qt的编译器的可再发行版本,并且您应该使用相同的编译器来构建您的应用程序!如果您想使用msvc2013,您需要首先编译Qt,因为msvc2013没有预构建的Qt。只有这样,才能使用它构建应用程序。它会很好的工作,除了msvc2013,你不需要任何VC可再发行文件。如果我也发送Qt版本的C运行时,我可以使用它,唯一我不明白的是2010包的用途,因为我下载了2012版
    Warning: At least one delay-load dependency module was not found.
    Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
    
    Failed to load platform plugin “windows”. Available platforms are:
    (and here there are the full pathes to the .dll-s, 
    eg: D:\cproj\keygen\win32\Release\plugins\platforms\qwindows.dll, so it must have found them.