2014-05-16 29 views
1

我試圖將C程序編譯爲與WinXP和Win7兼容的可執行文件。 由於代碼需要儘可能緊湊,所以我希望它使用DLL。 Visual Studio Express 2012 update4可以爲WinXP生成代碼,但後者在Win7上無法使用。 當在Win7上運行時,出現以下錯誤:「程序不能運行,因爲MSVCR110.dll丟失...」將C代碼編譯爲與WinXP和Win7兼容的單個可執行文件

任何人都可以幫我解決這個問題嗎? 在此先感謝!

+0

對於每個操作系統都有不同的可執行文件真的有問題嗎? – Shahbaz

+0

感謝您的快速回復。不幸的是,這是一個問題.... – user3644884

+0

這個鏈接可以幫助你嗎? https://software.intel.com/en-us/articles/linking-applications-using-visual-studio-2012-to-run-on-windows-xp – MicroVirus

回答

4

在VS2012下編譯的程序應該可以在XP和Windows 7上運行。問題在於Windows 7機器沒有部署所需的運行時。這是鏈接到動態運行時的先決條件。您必須將運行時部署到運行程序的任何機器。

一旦部署運行時,例如通過使用VS2012可再發行組件包,您應該會發現代碼將運行。請注意,您需要在所有機器上執行此操作,而不僅限於Windows 7計算機。事實上,您在Windows XP機器上不需要這麼做就意味着其他一些應用程序已經在該處部署了運行時。 XP機器很可能是您的開發機器,並且在安裝Visual Studio時部署了運行時。

作爲安裝可再發行組件包的替代方案,您可以將運行時DLL MSVCR110.dll放在可執行文件所在的目錄中。我建議您閱讀關於此主題的文檔:Redistributing Visual C++ Files

請注意,如果您確實想使部署儘可能小而簡單,那麼與動態運行時鏈接將無法實現該目標。你會發現靜態鏈接導致了最小和最簡單的部署。不是我推薦的。由於各種原因,動態運行時間將是首選。

+0

+1。對於可能的* most * compact部署,根本不要鏈接到C運行時庫。當然,說起來容易做起來難 - 首先,這意味着你的代碼必須避免所有C標準庫調用,只使用Windows API--如果你正在處理任何長度的現有代碼,這可能是不合理的。更復雜的是,Windows API的一部分(例如許多「安全的字符串函數」)實際上是在C運行時庫中實現的。儘管如此,對於某些專業目的而言,這是一個明智的選擇。 –

相關問題