Qt命令行编译在链接器阶段失败,出现垃圾NXCOMPAT数据
Qt command line compilation fails at linker stage with garbage NXCOMPAT data
我正在使用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链接器。
我能够通过在执行构建之前导出预期路径来解决这个问题。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- Qt命令行编译在链接器阶段失败,出现垃圾NXCOMPAT数据