【问题标题】:why lld-link.exe is needed when building Qt 6.1.2 examples?为什么在构建 Qt 6.1.2 示例时需要 lld-link.exe?
【发布时间】:2021-10-14 14:26:13
【问题描述】:

我正在尝试使用 MSVC2019 套件构建 Qt 的模拟时钟示例,但是 Qt Creator 抱怨如下。我很好奇为什么需要 lld-link.exe,而我想使用 MSVC2019 作为编译器。

我觉得有趣的是,在 Makefile.Debug 中,CC 和 CXX 设置为 clang-cl。

我可能对 Qt Creator / Qt 示例如何使用 MSVC2019 有一些误解。

任何评论都非常感谢。

套件配置

工具 > 选项 > 套件 > 套件

工具 > 选项 > 工具包 > 编译器

编译输出

01:49:57: Running steps for project analogclock...
01:49:57: Starting: "C:\Qt\6.1.2\msvc2019_64\bin\qmake.exe" C:\Qt\Examples\Qt-6.1.2\widgets\widgets\analogclock\analogclock.pro -spec win32-clang-msvc "CONFIG+=debug"
01:49:57: The process "C:\Qt\6.1.2\msvc2019_64\bin\qmake.exe" exited normally.
01:49:57: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" -f C:/Qt/Examples/Qt-6.1.2/widgets/widgets/build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug/Makefile qmake_all

jom 1.1.3 - empower your cores

01:49:57: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited normally.
01:49:57: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" 
    C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt\6.1.2\msvc2019_64\include -IC:\Qt\6.1.2\msvc2019_64\include\QtWidgets -IC:\Qt\6.1.2\msvc2019_64\include\QtGui -IC:\Qt\6.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt\6.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\analogclock.obj.3280.0.jom
    clang-cl -BxC:\Qt\6.1.2\msvc2019_64\bin\qmake.exe -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -E C:\Qt\6.1.2\msvc2019_64\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h
    C:\Qt\6.1.2\msvc2019_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --compiler-flavor=msvc --include C:/Qt/Examples/Qt-6.1.2/widgets/widgets/build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug/debug/moc_predefs.h -IC:/Qt/6.1.2/msvc2019_64/mkspecs/win32-clang-msvc -IC:/Qt/Examples/Qt-6.1.2/widgets/widgets/analogclock -IC:/Qt/6.1.2/msvc2019_64/include -IC:/Qt/6.1.2/msvc2019_64/include/QtWidgets -IC:/Qt/6.1.2/msvc2019_64/include/QtGui -IC:/Qt/6.1.2/msvc2019_64/include/QtCore -I. -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" ..\analogclock\analogclock.h -o debug\moc_analogclock.cpp
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt\6.1.2\msvc2019_64\include -IC:\Qt\6.1.2\msvc2019_64\include\QtWidgets -IC:\Qt\6.1.2\msvc2019_64\include\QtGui -IC:\Qt\6.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt\6.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\main.obj.3280.63.jom
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt\6.1.2\msvc2019_64\include -IC:\Qt\6.1.2\msvc2019_64\include\QtWidgets -IC:\Qt\6.1.2\msvc2019_64\include\QtGui -IC:\Qt\6.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt\6.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\moc_analogclock.obj.3280.344.jom
    lld-link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\analogclock.exe @C:\Users\MIKE-~1\AppData\Local\Temp\analogclock.exe.3280.2329.jom
'lld-link' is not recognized as an internal or external command,
operable program or batch file.
jom: C:\Qt\Examples\Qt-6.1.2\widgets\widgets\build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug\Makefile.Debug [debug\analogclock.exe] Error 1
jom: C:\Qt\Examples\Qt-6.1.2\widgets\widgets\build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug\Makefile [debug] Error 2
01:50:00: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project analogclock (kit: Desktop Qt 6.1.2 MSVC2019 64bit)
When executing step "Make"
01:50:00: Elapsed time: 00:03.

Makefile.DEBUG

#############################################################################
# Makefile for building: analogclock
# Generated by qmake (3.1) (Qt 6.1.2)
# Project:  ..\analogclock\analogclock.pro
# Template: app
#############################################################################

MAKEFILE      = Makefile.Debug

EQ            = =

####### Compiler, tools and options

CC            = clang-cl
CXX           = clang-cl
DEFINES       = -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS        = -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -utf-8 -W3 /Fddebug\analogclock.vc.pdb $(DEFINES)
CXXFLAGS      = -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb $(DEFINES)
INCPATH       = -I..\analogclock -I. -IC:\Qt\6.1.2\msvc2019_64\include -IC:\Qt\6.1.2\msvc2019_64\include\QtWidgets -IC:\Qt\6.1.2\msvc2019_64\include\QtGui -IC:\Qt\6.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt\6.1.2\msvc2019_64\mkspecs\win32-clang-msvc 
LINKER        = lld-link



【问题讨论】:

  • 您正在使用的 Qt 工具包(出于某种原因)被配置为使用 clang 而不仅仅是直接使用 MSVC 编译器。您可以查看 Qt Creator 工具 -> 选项 -> 工具包页面(或屏幕截图中的“管理工具包”按钮)以查看工具包的实际设置方式以及它设置使用的编译器(您也可以将其更改为那里)。如果仍然丢失,则可能发布工具包和编译器设置页面的屏幕截图。在这种情况下,项目的构建设置信息量不是很大。
  • @MaximPaperno 我添加了工具 > 选项 > 工具包 > 工具包/编译器,但我仍然不明白为什么会出现问题。

标签: qt qt6


【解决方案1】:

显然我需要在我的 VS2019 安装中添加对 Clang/LLVM 的支持。

按照下面讨论的说明进行操作:

Clang/LLVM Support in Visual Studio

在 Windows 上,安装 Clang 工具很容易。只需抓住“Clang Windows 编译器”,“桌面”的可选组件 使用 C++ 进行开发”工作负载。这将安装您需要的一切 在 Windows 上使用 Clang 进行开发。

这是我通过 Visual Studio 安装程序完成的方法

【讨论】:

  • 非常感谢。它使用新的 QtCreator 5 和 msvc 编译器解决了构建问题。
  • 这是否正确修复了原始问题中显示的原始(损坏的)“Desktop Qt6.1.2 MSVC2019 64bit”Qt Kit?还是该套件仍使用 Qt/Tools 目录中的编译器?仅仅因为lld-link 现在在 PATH 中并不意味着整个套件设置正确。就我个人而言,我会确保 Qt 工具包使用来自相同 LLVM/Clang 版本/包(大概是安装的一个 VSI)中的所有组件(编译器、链接器等)。或者,如果 QtCreator 自动检测到新的、完整的 LLVM 安装并从中创建了一个工具包,那将是使用恕我直言的工具包。
【解决方案2】:

根据我对该问题的评论,为 MSVC2019 自动检测到的 Qt Kit 设置似乎使用了错误的编译器。虽然当然可以在 Windows 上使用 LLVM(clang)编译器,但我个人只使用“官方”LLVM 发行版(而不是 MSVC 中包含的任何发行版)。

无论如何,解决此问题的一种方法是手动添加正确的套件。最简单的方法应该是(根据问题中的屏幕截图):

  1. 在套件设置中,选择现有的Desktop Qt6.1.2 MSVC2019 64bit 套件。
  2. 使用Clone 按钮创建它的副本,然后从列表中选择副本。
  3. 在副本中,只需将两个 Compiler 选项更改为使用 Microsoft Visual C++ Compiler 16.10.31424.327 (amd64)(尽管其中一个用于“C”编译器,但名称中都包含“C++”是可以的)。
  4. 调整套件名称,以便您知道项目设置中的哪个。也许将损坏的自动检测到的套件名称更改为包含“LLVM”或“broken”或类似的名称以区分它。 “确定”退出选项对话框。
  5. 现在您可以在项目构建设置中选择新添加的工具包。只需单击它即可启用它。您可能还想禁用损坏的套件(右键单击套件名称以显示菜单)。

请记住,Qt 6.1 的功能还不完整(并非 5.x 中的所有内容都已移植),但包含的示例应该可以工作。即将发布的 6.2 版本应该会更加完整,但仍然会破坏很多 5.x 的内容。要尝试与大多数现有 Qt 项目具有更好向后兼容性的更成熟的版本,请使用 5.12.x 或 5.15.x 版本。

【讨论】:

  • 这是一个很好的解决方法,但是我怎样才能激活/受益于“基于 MSVC2019 的默认 LLVM 64 位”...... ???
  • @MikeITExpert 我不知道为什么那个“编译器”甚至在自动检测到的列表中(可能是一个错误)。在我安装 MSVC 2019 之后,我的 QtC 配置中也有它。但是查看它的详细信息(在编译器设置中),它非常混乱——使用与 QtC 一起安装的编译器二进制文件(用于代码解析)和一个 MSVC init用于 MSVC 编译器的命令(不是 clang)。我不知道这将如何工作,但也许我错过了一些东西。如果你真的想要 LLVM(出于某种原因),从 github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.1 d-load 并安装 -win64 包
猜你喜欢
  • 1970-01-01
  • 2012-12-28
  • 2010-11-08
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多