使用垃圾NXCOMPAT数据

时间:2017-11-11 07:02:43

标签: c++ windows qt linker

我正在使用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:release\Project-Test.exe @C:\Users\User\AppData\Local\Temp\Project-Test.exe.7920.282.jom

然后立刻失败了:

link: extra operand ÔÇÿ/NXCOMPATÔÇÖ
Try 'link --help' for more information.
jom: C:\Users\User\ProjectName\Project-AppAndTest\Project-Test\Makefile.Release [release\Project-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包含路径设置,并且程序将不编译而不修改所有#includes以明确指示标头所在的位置。

我希望得到一些关于可能导致此错误的信息,以及我如何解决它。

1 个答案:

答案 0 :(得分:0)

问题是由mingw链接器以静默方式添加到bash路径引起的。

我一直在git bash下构建软件,它似乎将MinGW链接器添加到路径中;所以当调用link命令时,它使用的是GNU链接器而不是MSVC链接器。

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