如何使用CMake设置MSVC嵌入清单链接器设置?

j8ag8udp  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(271)

我试图在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?

3okqufwl

3okqufwl1#

如果您确实可以接受为embed manifest设置设置NO以解决此问题的后果,我非常肯定使用CMake执行此操作的建议是只使用命令行链接器标志:/MANIFEST:NO .
根据要应用此命令的目标类型,使用以下一个或多个命令:CMAKE_EXE_LINKER_FLAGSCMAKE_SHARED_LINKER_FLAGSCMAKE_STATIC_LINKER_FLAGS中的任意一个。
由于这个问题与您的特定计算机有关,我将使用配置命令中的-D标志通过命令行将其设置为缓存变量,而不是使用target_link_optionsadd_link_options将其硬编码到CMakeLists.txt文件中。
显然,最好找出问题的原因,但对我来说幸运的是,你没有要求这样做:)(我不认为任何人可以为你弄清楚没有访问您的机器)
相关文件:

相关问题