在带有QProcess的Windows 64位操作系统上,使用Qt 32位工具包编译Qt程序

在带有QProcess的Windows 64位操作系统上,使用Qt 32位工具包编译Qt程序,windows,qt,msbuild,Windows,Qt,Msbuild,我想在带有QProcess的Windows 64位操作系统上使用Qt32位工具包编译我的Qt程序 我使用64位工具包编译,使用: C:/Qt/5.15.1/msvc2019_64/bin/qmake.exe 然后 C:/Qt/Tools/QtCreator/bin/jom.exe 它工作得非常好 我试图用32位编译的东西: QProcess envBuilder; envBuilder.start(“\”C:/ProgramFiles(x86)/Microsoft Visual Studio 1

我想在带有QProcess的Windows 64位操作系统上使用Qt32位工具包编译我的Qt程序

我使用64位工具包编译,使用:
C:/Qt/5.15.1/msvc2019_64/bin/qmake.exe
然后
C:/Qt/Tools/QtCreator/bin/jom.exe
它工作得非常好

我试图用32位编译的东西:

QProcess envBuilder;
envBuilder.start(“\”C:/ProgramFiles(x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat\”,QStringList());
envBuilder.waitForFinished();

qDebug()您的错误是由于您使用64位库编译了32位目标(反之亦然)

一方面,仔细选择您使用的
vcvarsxxx.bat
版本

我说的是台词

C:/ProgramFiles(x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat
您会发现,对于不同的目标,此
bat
文件有许多变体

另一方面,您可能还需要验证编译工具包中的路径是否不混合路径(例如:32位工具包使用64位路径,反之亦然)


您可能还需要检查。

您的错误是由于您使用64位库编译了32位目标(反之亦然)

一方面,仔细选择您使用的
vcvarsxxx.bat
版本

我说的是台词

C:/ProgramFiles(x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat
您会发现,对于不同的目标,此
bat
文件有许多变体

另一方面,您可能还需要验证编译工具包中的路径是否不混合路径(例如:32位工具包使用64位路径,反之亦然)


您可能还需要检查。

感谢所有的评论,最终有效的方法是:

QProcess envBuilder;
envBuilder.start(“\”C:/ProgramFiles(x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat\”&&C:/Qt/5.15.1/msvc2019/bin/qtenv2.bat&&C:/Qt/5.15.1/msvc2019/bin/qmake.exe“,{”MyProject.project.pro“,“-o”,“Makefile”,“-spec”,“win32 msvc”,“\”CONFIG+=qtquickcompiler\”);
envBuilder.waitForFinished();

qDebug()感谢所有的评论,最终起作用的是:

QProcess envBuilder;
envBuilder.start(“\”C:/ProgramFiles(x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat\”&&C:/Qt/5.15.1/msvc2019/bin/qtenv2.bat&&C:/Qt/5.15.1/msvc2019/bin/qmake.exe“,{”MyProject.project.pro“,“-o”,“Makefile”,“-spec”,“win32 msvc”,“\”CONFIG+=qtquickcompiler\”);
envBuilder.waitForFinished();


qDebug()我复制/粘贴了您的代码,它编译并执行。我没有这个问题。您是否有多个
编译工具包
?是5.15.1 64位、5.15.1 32位和其他一些。错误是由于您希望使用64位库在32位中编译/链接,或者相反。我已经犯了这个错误。验证编译工具包中的不同路径,它应该正确。如果它有效并解决了您的问题,那么发布您的解决方案,我将向您投一票:-)所有
envBuilder.start()
都是独立的,因此调用批处理文件无助于初始化以下执行的环境变量。如何使环境“生成”从命令
vcvars32.bat
vcvvarsall.bat x68
持续到命令
qmake.exe
jom.exe
,我复制/粘贴您的代码并编译和执行。我没有这个问题。您是否有多个
编译工具包
?是5.15.1 64位、5.15.1 32位和其他一些。错误是由于您希望使用64位库在32位中编译/链接,或者相反。我已经犯了这个错误。验证编译工具包中的不同路径,它应该正确。如果它有效并解决了您的问题,那么发布您的解决方案,我将向您投一票:-)所有
envBuilder.start()
都是独立的,因此调用批处理文件无助于初始化以下执行的环境变量。如何使环境“生成”从命令
vcvars32.bat
vcvvarsall.bat x68
持续到命令
qmake.exe
jom.exe
?路径确实指向64位工具包,我编辑了QProcess的路径,现在得到:
LINK:致命错误LNK1181:无法打开输入文件“User32.lib”
库路径中缺少路径。我几乎可以肯定这来自于
visualstudio
初始化脚本(vcvarsxxx.bat
脚本)。你能检查一下你发射的目标是否正确吗?有多个文件(
vcvarsall.bat
vcvars32.bat
vcvarsx86_amd64.bat
vcvars64.bat
)。检查您是否使用了正确的。还要检查在工具包的
System environment
中,是否没有丢失到系统环境的所有路径。如我的原始帖子所示,我运行了
vcvars32.bat
vcvarsall.bat x86
,但它没有改变任何事情。我不明白你的最后一句话,我不明白。我不是用QtCreator编译,而是用QProcess中的命令行编译。我想让我的64位“构建器”程序在他的QProcess中编译一个32位的Qt程序。在你最初的帖子中,你不仅仅运行
vcvars32
,而是运行
vcvarsall
,如果你的机器是64位,那么它将是64位的。尝试显式使用
vcvars32
。实际上,您将运行它两次(先运行32次,然后运行全部),这将覆盖第一次。仅运行
vcvvars32
到tryPATH确实指向64位工具包,我编辑了我的QProcess的路径,现在我得到:
LINK:致命错误LNK1181:无法打开输入文件“User32.lib”
库路径中缺少路径。我几乎可以肯定这是真的
Qt5Charts.lib(Qt5Charts.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'