Qt命令行编译在链接器阶段失败,出现垃圾NXCOMPAT数据

Qt command line compilation fails at linker stage with garbage NXCOMPAT data

本文关键字:数据 NXCOMPAT 失败 编译 命令行 链接 段失败 Qt      更新时间:2023-10-16

我正在使用Visual Studio cl.exe编译器在Windows 10上使用Qt 5.9编译一个程序。该程序是跨平台的,Mac版本(使用clang构建)构建良好。

指令是:

qmake.exe Project-Test.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug" && jom.exe

生成moc和.o文件后,链接器以开头

link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:releaseProject-Test.exe @C:UsersUserAppDataLocalTempProject-Test.exe.7920.282.jom

然后立即失败:

link: extra operand ÔÇÿ/NXCOMPATÔÇÖ
Try 'link --help' for more information.
jom: C:UsersUserProjectNameProject-AppAndTestProject-TestMakefile.Release [releaseProject-Test.exe] Error 1

我尝试过qmake和jom的各种组合,但没有明显的区别。我的感觉是,有些环境变量缺失或不正确
NXCOMPAT似乎与软件是否可在PC上运行有关。我确实有一些与平台相关的代码部分(如果PC做x,如果Mac做y),但当它在gui中使用完全相同的命令编译和链接时,我认为这不是原因。

我在两台不同的计算机上测试了此部署,但出现了相同的错误。

一些澄清将是答案-

该程序从gui构建和运行良好,但该程序应该作为批处理文件的一部分构建和执行,并且不能以任何方式涉及gui。

我使用的是QWebEngine库,目前无法使用MinGW进行编译,所以我只能使用Visual Studio/Cl。

该平台是64位的,但程序包括32位库,因此必须使用win32-msvc标志进行编译。

我曾尝试使用vcvarsall.bat运行软件,但这似乎破坏了Qt-include路径设置,如果不修改所有#includes以明确指示标头的位置,程序将无法编译。

我希望能得到一些信息,什么可能导致这个错误,以及我如何去解决它

该问题是由在bash路径中静默添加的mingw链接器引起的。

我一直在gitbash下构建软件,它似乎为MinGW链接器的路径做了准备;因此,当调用链接命令时,它使用的是GNU链接器而不是MSVC链接器。

我能够通过在执行构建之前导出预期路径来解决这个问题。