簡體   English   中英

錯誤 MSB6006:“link.exe”以代碼 1 退出運行 SDV(Static 驅動程序驗證程序)時,Visual Studio 2019、SDK 10 build 19041、windows 10 build 19041

[英]error MSB6006: "link.exe" exited with code 1 When run SDV ( Static Driver Verifier) , Visual studio 2019 , SDK 10 build 19041, windows 10 build 19041

我們創建新的 KMDF USB 項目,打開 visual studio 2019 v 16.11,go 到文件 -> 新建 -> 項目 -> 選擇 Kernel 模式驅動程序,USB (KMDF)。 沒有任何修改,這個項目沒有錯誤,構建時沒有警告。 當我們為此項目運行 SDV(Static Driver Verifier)時,smvbuild.log 顯示此錯誤。

C:\Program Files (x86)\Windows Kits\10\TOOLS\SDV\smv\bin\link.exe /ERRORREPORT:QUEUE /OUT:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.sys" /VERSION:"10.0" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\10\lib\wdf\kmdf\x86\1.15\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\10\lib\wdf\kmdf\x86\1.15\WdfDriverEntry.lib" usbdex.lib ntstrsafe.lib "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\wpprecorder.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.pdb" /SUBSYSTEM:NATIVE,"10.00" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /guard:cf /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:10.0 /pdbcompress /debugtype:pdata Release\Device.obj
  Release\Driver.obj
  Release\Queue.obj
  
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(1074,5): error MSB6006: "link.exe" exited with code 1. [C:\Users\tungpvt\source\repos\USB Driver2\USB Driver2\USB Driver2.vcxproj]
Done executing task "Link" -- FAILED.
Done building target "Link" in project "USB Driver2.vcxproj" -- FAILED.
Done Building Project "C:\Users\tungpvt\source\repos\USB Driver2\USB Driver2\USB Driver2.vcxproj" (rebuild target(s)) -- FAILED.

此外,當在命令行上運行 link.exe 時, Visual studio -> Tools -> Command Line -> Developer Command Prompt具有與上面相同的參數,它顯示:

Failed to load Intercept.XML:
Could not find file 'c:\program files (x86)\windows kits\10\tools\sdv\smv\bin\%BE%-Intercept.xml'.

我們已經將 BE 和 smv 變量添加到 Windows 系統環境

variable name: BE , variable value: MSBuild
variable name: smv , variable value: C:\Program Files (x86)\Windows Kits\10\Tools\sdv\smv

在Project properties中的Linker session,我們修改Project properties -> Linker -> Input -> Additional Dependency 為

%(AdditionalDependencies);$(DDK_LIB_PATH)usbdex.lib;$(DDK_LIB_PATH)ntstrsafe.lib

然后我們可以通過命令行

C:\Program Files (x86)\Windows Kits\10\TOOLS\SDV\smv\bin\link.exe /ERRORREPORT:QUEUE /OUT:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.sys" /VERSION:"10.0" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\BufferOverflowFastFailK.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\ntoskrnl.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\hal.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\wmilib.lib" "C:\Program Files (x86)\Windows Kits\10\lib\wdf\kmdf\x86\1.15\WdfLdr.lib" "C:\Program Files (x86)\Windows Kits\10\lib\wdf\kmdf\x86\1.15\WdfDriverEntry.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\usbdex.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\ntstrsafe.lib" "C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\km\x86\wpprecorder.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.pdb" /SUBSYSTEM:NATIVE,"10.00" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:\Users\tungpvt\source\repos\USB Driver2Release\USBDriver2.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /guard:cf /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:10.0 /pdbcompress /debugtype:pdata Release\Device.obj
  Release\Driver.obj
  Release\Queue.obj

但是仍然運行SDV錯誤。

請幫我解決這個問題。 謝謝。

================================================ =========================

在我更新到最新的 SDK、WDK 到版本 10.1.22000 並更新 visual studio 2019 之后,模板驅動程序的錯誤消失了,但我在我的項目中遇到了其他問題

sdv/smvcl.log 

c1 : fatal error C1252: Circular or missing dependency between plugins: 'PREfast Drivers Plugin' requires GUID '{EB170136-3433-4C16-AE1D-8998BA5CAB16}'.

誰能幫我?

嗨,我在 WDK 10.0.22000(使用 visual studio 2019)中遇到了這個問題(static 驅動程序驗證程序版本上的鏈接器錯誤),這是我找到的解決方案:它在編譯時定義宏 NT_PROCESSOR_GROUPS 時鏈接(必須重建所有),所以將這個宏添加到預處理器定義中就可以了(至少對於我的設置而言)。

以防萬一您現在或將來遇到 static 次驅動程序驗證程序失敗,這里有一個有用的提示:

在啟用 /debug 的情況下運行 SDV 目標:so

msbuild /t:sdv /p:Inputs="/check:* /debug" path\to\myproject.vcxproj /p:Configuration=Release /p:Platform=x64 /maxCpuCount=8

將創建調試日志。 linker中的output在sdv子目錄下,命名為smvlink1.log。 該目錄中還有其他有用的日志文件(我花了很長時間才找到它們,但 output 指導我找到了上面提出的解決方案)。

在 Visual Studio 2019 中遇到 SDV 問題的並不只有你一個人。我在更新工具和重建后使用成熟的驅動程序遇到了這個問題。 幸運的是,通常情況下,OSR 的好人自己已經一頭扎進了這堵牆,並找到了解決方案

看起來,如果您嘗試在“在構建時啟用代碼分析”設置為“是”的驅動程序項目上運行 SDV,SDV 將始終以您在上文中看到的方式失敗。 因此,解決方法是禁用構建時的代碼分析,並確保將項目保存到磁盤。 然后運行 SDV。

我正在處理的驅動程序確實打開了“在生成時啟用代碼分析”。 關閉它允許 SDV 成功構建它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM