的Visual Studio提供目標平臺版本設置爲ç和C++項目。我正在用目標平臺版本8.1構建我的代碼。但是,當我與產生MSVC解決方案CMake的一些第三方庫的默認設置是目標平臺10.x版。當應用程序使用編譯爲的庫時,仍然可以在舊版本上運行我的應用程序Windows版本如Vista/7/8目標平臺版本10.x?將某個庫的MSVC中的目標平臺版本設置爲10.x使得程序與Windows Vista/7/8上的程序不兼容?
回答
我使用的的WindowsSDK從的Windows 10開始提供GetIntegratedDisplaySize
功能測試場景中的問題。我測試的情況下使用目標平臺10.x版和使用目標平臺8.1版的靜態和共享庫的可執行文件。結果如下:
在靜態庫的情況下:
嘗試使用功能
GetIntegratedDispaySize
還需要連接的OneCoreUAP.lib
其中函數的實現是靜態鏈接庫。由於OneCoreUAP.lib
是Windows 10功能當目標平臺版本的可執行文件設置爲8.1該庫不能鏈接在其中,編譯器會產生鏈接時間錯誤。由於可執行文件無法創建,因此無法在任何版本的Windows版本上運行。在共享庫的情況下。
由於共享庫使用目標平臺版本10.x它成功鏈接到
OneCoreUAP.lib
所需的GetIntegratedDispaySize
函數。共享庫dll
文件和導入lib
文件被創建。試圖將可執行文件與進口lib
工作和對運行正常的Windows 10創建可執行鏈接。試圖啓動可執行文件,並在共享庫dll
上使用老版本Windows版本(Windows 7用於實驗)會產生錯誤api-ms-win-core-sysingo-l1-2-3.dll
。因此,可執行文件不能在較早的版本上運行Windows版本可能除非全部需要dll
文件將隨之重新分發。
如果庫是可選的DLL的(即你可以沒有他們跑,只是退化的功能),然後有一個解決方案:使用延遲加載。延遲加載的DLL只在您調用該DLL中的第一個函數時加載。現在,當您使用Windows 7/8時,請避免調用任何此類函數,並且不會出現加載失敗。
靜態庫可能會導致問題,因爲它們鏈接到你的可執行文件。這意味着Windows 7將不會發現到底發生了什麼錯,但你仍然得到問題,當您嘗試調用這是僅在Windows 10推出。然而,如果靜態庫只使用Windows 7功能的函數,它會工作。
- 1. Xcode應用程序版本與Mac OS X版本不兼容
- 2. 如何使用CMake設置MSVC目標平臺版本?
- 3. PB 10應用程序Windows 10兼容
- 4. 導出與舊版本兼容的OS X應用程序
- 5. 構建與8.1和10兼容的Windows應用程序
- 6. 在Delphi 2007應用程序中設置Windows 7兼容圖標
- 7. 使應用程序與以前的iOS版本兼容
- 8. 創建與所有版本和設備兼容的Android應用程序目錄
- 9. 在支持UAP Ver 10應用程序的類庫中,應將哪個版本的.Net標準作爲目標
- 10. 我的程序目標是哪個版本的OS X?
- 11. 與原版iPad迷你版不兼容的應用程序
- 12. 設置爲多平臺應用程序
- 13. 我swift - 領域應用程序崩潰與不兼容的庫版本問題
- 14. 使應用程序的更新版本與其以前版本兼容
- 15. QT - 設置Windows平臺版本
- 16. 創建一個跨平臺的Windows,Mac OS X應用程序
- 17. Netcore庫與通用Windows應用程序和其他的兼容
- 18. 我的應用程序可以兼容多個版本的MPI
- 19. 「提供程序與Oracle客戶端版本不兼容」
- 20. 提供程序與Oracle客戶端版本不兼容
- 21. Delphi XE 5在Windows 10操作系統上的Windows應用程序兼容性
- 22. 上已經安裝的SDK程序兼容性以前版本的21版本
- 23. 如何使Android應用程序與6.0以下版本兼容
- 24. 在Windows 10通用應用程序上檢查平臺
- 25. 程序包'Microsoft.EntityFrameworkCore.SqlServer'與項目中的'all'框架不兼容
- 26. 端點與Windows沉浸式項目的版本1不兼容
- 27. 設置一個MSVC DLL,以便與ABI兼容的__stdcall MinGW DLL
- 28. libpng警告:應用程序和庫中的libpng版本不兼容
- 29. 該文件的版本與Windows版本不兼容
- 30. Windows 10應用程序的多個版本
如果您將目標設置爲Windows 10,使您可以使用早期版本中不存在的功能。如果你這樣做,那當然會成爲一個問題。 –