【问题标题】:Jom error while trying to compile a project in QT尝试在 QT 中编译项目时出现 Jom 错误
【发布时间】:2016-09-30 20:32:02
【问题描述】:

我正在尝试运行我的项目,它设法构建但由于此编译错误而迅速终止。我正在为 windows kit 10、visual studio 14 和 directx 使用 64 位库。

    13:29:13: Running steps for project Phase64...
13:29:13: Configuration unchanged, skipping qmake step.
13:29:13: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" 
    C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    C:\Qt\5.6\msvc2015_64\bin\moc.exe -DUNICODE -DWIN32 -DWIN64 -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -D_WIN32 -D_WIN64 -IC:/Qt/5.6/msvc2015_64/mkspecs/win32-msvc2015 -IC:/Users/Phenom/Documents/QT/Phase64 -I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt" -I"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include" -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -IC:/boost/boost_1_61_0 -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -I"C:/Program Files (x86)/Windows Kits/10/Include" -I"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include" -IC:/Qt/5.6/msvc2015_64/include -IC:/Qt/5.6/msvc2015_64/include/QtWidgets -IC:/Qt/5.6/msvc2015_64/include/QtGui -IC:/Qt/5.6/msvc2015_64/include/QtANGLE -IC:/Qt/5.6/msvc2015_64/include/QtCore -I. ..\Phase64\mainwindow.h -o debug\moc_mainwindow.cpp
:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include/atlbase.(3210): Parse error at "__identifier"
jom: C:\Users\me\Documents\QT\build-Phase64-Desktop_Qt_5_6_0_MSVC2015_64bit-Debug\Makefile.Debug [debug\moc_mainwindow.cpp] Error 1
    cl -c -FIstdafx.h -Yustdafx.h -Fpdebug\Phase64_pch.pch -nologo -Zc:wchar_t -FS -Zc:strictStrings -Zc:throwingNew -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -EHsc /Fddebug\Phase64.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\Phase64 -I. -I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include" -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -IC:\boost\boost_1_61_0 -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -I"C:\Program Files (x86)\Windows Kits\10\Include" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include" -IC:\Qt\5.6\msvc2015_64\include -IC:\Qt\5.6\msvc2015_64\include\QtWidgets -IC:\Qt\5.6\msvc2015_64\include\QtGui -IC:\Qt\5.6\msvc2015_64\include\QtANGLE -IC:\Qt\5.6\msvc2015_64\include\QtCore -Idebug -I. -IC:\Qt\5.6\msvc2015_64\mkspecs\win32-msvc2015 -Fodebug\ @C:\Users\Phenom\AppData\Local\Temp\main.obj.1416.31.jom
main.cpp
    cl -c -FIstdafx.h -Yustdafx.h -Fpdebug\Phase64_pch.pch -nologo -Zc:wchar_t -FS -Zc:strictStrings -Zc:throwingNew -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -EHsc /Fddebug\Phase64.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\Phase64 -I. -I"C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include" -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -IC:\boost\boost_1_61_0 -I"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include" -I"C:\Program Files (x86)\Windows Kits\10\Include" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include" -IC:\Qt\5.6\msvc2015_64\include -IC:\Qt\5.6\msvc2015_64\include\QtWidgets -IC:\Qt\5.6\msvc2015_64\include\QtGui -IC:\Qt\5.6\msvc2015_64\include\QtANGLE -IC:\Qt\5.6\msvc2015_64\include\QtCore -Idebug -I. -IC:\Qt\5.6\msvc2015_64\mkspecs\win32-msvc2015 -Fodebug\ @C:\Users\Phenom\AppData\Local\Temp\mainwindow.obj.1416.47.jom
mainwindow.cpp
jom: C:\me\Phenom\Documents\QT\build-Phase64-Desktop_Qt_5_6_0_MSVC2015_64bit-Debug\Makefile [debug] Error 2
13:29:17: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project Phase64 (kit: Desktop Qt 5.6.0 MSVC2015 64bit)
When executing step "Make"
13:29:17: Elapsed time: 00:04.

以前有人遇到过这个问题吗?

【问题讨论】:

  • 这可能有很多原因。日志的其余部分是什么样的? Qt Creator 将错误日志窗口滚动到这个级别,有效地将所有有用信息隐藏给不知情的用户。
  • @rubenvb 我已经更新了帖子并添加了整个日志。
  • 好的,没有我希望的那么有用。你能在Options->Build&Run的第一个选项卡上取消选中“使用jom而不是nmake”选项,然后再试一次吗?可能是 jom 问题。
  • 我刚刚尝试过,但收到了 2 个构建错误。这两个错误都表明未找到 nmake 文件。 NMAKE:-1: error: U1077: 'C:\Qt\5.6\msvc2015_64\bin\moc.exe' : return code '0x1' NMAKE:-1: error: U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
  • 忽略它。这不是一个jom问题。这是一个 moc/atl/localized 问题(见下文)。

标签: c++ qt makefile


【解决方案1】:

您的扩展日志显示 Qt 的 moc 在 ATL 标头上阻塞:

C:\Qt\5.6\msvc2015_64\bin\moc.exe -DUNICODE -DWIN32 -DWIN64 -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -D_WIN32 -D_WIN64 -IC:/Qt/5.6/msvc2015_64/mkspecs/win32-msvc2015 -IC:/Users/Phenom/Documents/QT/Phase64 -I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt" -I"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include" -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -IC:/boost/boost_1_61_0 -I"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)/Include" -I"C:/Program Files (x86)/Windows Kits/10/Include" -I"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include" -IC:/Qt/5.6/msvc2015_64/include -IC:/Qt/5.6/msvc2015_64/include/QtWidgets -IC:/Qt/5.6/msvc2015_64/include/QtGui -IC:/Qt/5.6/msvc2015_64/include/QtANGLE -IC:/Qt/5.6/msvc2015_64/include/QtCore -I. ..\Phase64\mainwindow.h -o debug\moc_mainwindow.cpp
C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include/atlbase.(3210): Parse error at "__identifier"

这意味着以下任何一种:

  1. moc 无法处理 ATL 污点,在这种情况下,您需要向 Qt 寻求解决方案(例如,通过提交带有 !minimal! 示例代码的错误报告(例如,一个项目仅包含三个文件:main.cppsome_qobject.h/.cpp,其中最后一个是你的..\Phase64\mainwindow.h/.cpp的完全还原)来重现这个。(报告它here

    李>
  2. 您在代码中弄乱了诸如__identifier 之类的宏/标识符,这些宏/标识符由实现保留。修复您的代码,使其不执行此操作。

  3. Qt 的 moc 确实无法处理 ATL 标头。更改您的代码,使moced 文件不包含ATL 标头。 moc 定义了一个 Q_MOC_RUN 宏,因此您可以将 ATL 标头包装在 #ifndef Q_MOC_RUN...#endif 中,让 moc 忽略它们。

【讨论】:

    【解决方案2】:

    Qt 5.9.2 也有同样的问题。要至少暂时修复它,请将这行代码包含到 pro 文件中并运行 clean、qmake 并构建项目:

    DEFINES += _ATL_NATIVE_INITIALIZATION
    

    【讨论】:

      【解决方案3】:

      这似乎是 Qt 5.8 之后 moc 中已知的回归:https://bugreports.qt.io/browse/QTBUG-56634

      报告声称修复已合并到 5.9.2,但我仍然看到问题。

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2018-07-14
        • 1970-01-01
        • 2019-09-22
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多