我试图在Windows上构建qt6,但是,它报告错误,而cmake --build .
:
cmd.exe /C "cd . && D:\un-setup\cmake\bin\cmake.exe -E vs_link_dll --intdir=qtbase\src\gui\CMakeFiles\Gui.dir --rc=C:\PROGRA~2\WINDOW~4\10\bin\100220~1.0\x64\rc.exe --mt=C:\PROGRA~2\WINDOW~4\10\bin\100220~1.0\x64\mt.exe --manifests -- C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1430~1.307\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\Gui.rsp /out:qtbase\bin\Qt6Guid.dll /implib:qtbase\lib\Qt6Guid.lib /pdb:qtbase\bin\Qt6Guid.pdb /dll /version:6.4 /machine:x64 /debug -DYNAMICBASE -NXCOMPAT -LARGEADDRESSAWARE && cd ."
MT: command "C:\PROGRA~2\WINDOW~4\10\bin\100220~1.0\x64\mt.exe /nologo /manifest qtbase\bin\Qt6Guid.dll.manifest /outputresource:qtbase\bin\Qt6Guid.dll;#2" failed (exit code 0x1f) with the following output:
mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "qtbase\bin\Qt6Guid.dll".
我搜索了一下,原因是目标dll(Qt6Guid.dll)被其他程序锁定,可能是病毒软件(来源:mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file ... Access is denied)。因此,我尝试:
- 我禁用了我电脑中唯一的virsus软件windows defender。它仍然报告同样的错误。
- 使用processmonitor监视整个构建过程,我仍然没能找到锁定dll文件的是哪一个。
我仍然认为还有另一个解决办法:在VS GUI中,将嵌入清单设置为no。但是,我正在使用cmake,然后如何通过configure传递设置(无嵌入清单)?当前我的configure选项是(在Qt6源代码下的build dir中)
../configure.bat -prefix d:\Qt6
如果无法使用CMake将嵌入清单设置为NO
,如何完全禁用windows defender?
1条答案
按热度按时间3okqufwl1#
如果您确实可以接受为embed manifest设置设置
NO
以解决此问题的后果,我非常肯定使用CMake执行此操作的建议是只使用命令行链接器标志:/MANIFEST:NO
.根据要应用此命令的目标类型,使用以下一个或多个命令:
CMAKE_EXE_LINKER_FLAGS
、CMAKE_SHARED_LINKER_FLAGS
或CMAKE_STATIC_LINKER_FLAGS
中的任意一个。由于这个问题与您的特定计算机有关,我将使用配置命令中的
-D
标志通过命令行将其设置为缓存变量,而不是使用target_link_options
或add_link_options
将其硬编码到CMakeLists.txt文件中。显然,最好找出问题的原因,但对我来说幸运的是,你没有要求这样做:)(我不认为任何人可以为你弄清楚没有访问您的机器)
相关文件:
/MANIFEST