簡體   English   中英

刪除對Windows SDK版本的依賴性

[英]Removing dependency on Windows SDK version

我正在嘗試編譯MPIR(Windows友好版本的GMP)。 我安裝了Visual Studio 2017,所以它應該工作,但我收到此錯誤消息:

C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\VC\\VCTargets\\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [C:\\mpir\\msvc\\vs17\\lib_mpir_gc\\lib_mpir_gc.vcxproj]

我特別需要達到可以在任何機器上編譯的程度,而不僅僅是這個,所以在這台機器上安裝那個精確的SDK版本並不能解決問題。 我需要更改一些內容才能使用Visual Studio 2017進行構建。

查看C:\\mpir\\msvc\\vs17\\lib_mpir_gc\\lib_mpir_gc.vcxproj ,我找到了這一行:

<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

這看起來很有希望,但刪除它沒有任何效果; 錯誤消息保持不變。

我可以更改什么來消除此錯誤?

總結我相信這一點的理由應該是可能的:

如果你編寫一個C ++程序,比如在最簡單的場景中,在一個名為foo.cpp文件中,並使用命令行編譯器cl foo.cpp編譯它,它將自動編譯並鏈接當前Visual Studio使用的任何SDK版本安裝以生成foo.exe (除非你使用了一些非常專業的API,僅在以后的Windows版本中可用)在至少Vista上的任何Windows上運行。

這與msbuild調用的cl.exe完全相同。 所以我不是要求新的功能。 相反,正在生成上面的錯誤消息,因為出事讓開,打破了默認的“它只是工作”方案,並鎖定添加到特定SDK版本。 我問如何刪除鎖定並返回默認情況,它只適用於Visual Studio附帶的任何SDK版本。

正如評論所述,這是不可避免的。

如果使用Windows 8.1 SDK構建,則會獲得在Windows 8.1 或更高版本上運行的版本。 如果使用Windows 10 SDK構建,則可以將其功能限制為Windows 8,或者可以選擇Windows 10版本(例如1607)。 當然,如果您選擇一個新的SDK來使用新的Windows 10功能,則無法在Windows 8.1上運行它而錯過了該功能。

但是,如果您選擇Windows SDK,那么您將構建哪個Windows版本? 您將使用哪個<windows.h>

[編輯]對於可移植的C ++程序,它們顯然不包含<windows.h> ,並且它們不直接與Windows API鏈接。 相反,這些依賴於Microsoft的C ++標准庫(又名MSVCRT)的實現

[edit2]我剛算過,我的Visual Studio 2017安裝(15.7.5)有12個不同的SDK選項。 確實,有些是針對ARM的,但這只是基本前提的變體:您選擇的SDK會影響您可以運行生成的應用程序的計算機。

VS2019支持通過選擇適當的項目將項目定位到最新安裝的Windows SDK版本。 這可能會或可能不會產生預期的結果,但肯定會消除手動項目重定向的需要。

在此輸入圖像描述

暫無
暫無

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

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