我想在装有QProcess的Windows64位操作系统上用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:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat\"", QStringList());
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
envBuilder.start("\"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat\"", {"x86"});
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
envBuilder.start("C:/Qt/5.15.1/msvc2019/bin/qtenv2.bat", QStringList());
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
envBuilder.start("C:/Qt/5.15.1/msvc2019/bin/qmake.exe", {"MyProject.pro", "-o", "Makefile", "-spec", "win32-msvc", "\"CONFIG+=qtquickcompiler\""});
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
envBuilder.start("C:/Qt/Tools/QtCreator/bin/jom.exe", {"-f", "Makefile", "/D", "release"});
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
编译正确开始,但在链接它时输出:
Qt5Charts.lib(Qt5Charts.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
我错过了什么?
发布于 2020-10-29 10:42:52
感谢所有的评论,最终起作用的是:
QProcess envBuilder;
envBuilder.start("\"C:/Program Files (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.pro", "-o", "Makefile", "-spec", "win32-msvc", "\"CONFIG+=qtquickcompiler\""});
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
envBuilder.start("\"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat\" && C:/Qt/Tools/QtCreator/bin/jom.exe", {"-f", "Makefile", "/D", "release"});
envBuilder.waitForFinished();
qDebug() << envBuilder.exitCode();
qDebug() << envBuilder.readAllStandardOutput();
qDebug() << envBuilder.readAllStandardError();
发布于 2020-10-28 15:25:09
您的错误是因为您使用64位库编译32位目标(反之亦然)。
一方面,仔细选择您使用的vcvarsXXXX.bat
版本。
我说的是这条线
C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvars32.bat
您会发现此bat
文件有许多不同目标的变体。
另一方面,您可能还想验证compilation kits
中的路径是否没有混合路径(例如:对32位工具包使用64位路径,反之亦然)
你可能还想检查一下here。
https://stackoverflow.com/questions/64571474
复制相似问题