2011-12-06 30 views
2

考慮一臺機器(64位)沒有Visual Studio 2008和可再發行組件包x64, 1.要在該機器上運行64位應用程序(由visual studio 2008 sp1構建),我們是否需要Redistributable軟件包?需要Visual Studio Redistributable軟件包x64才能執行64位應用程序?

考慮一臺機器(64位)使用visual studio 2008,但它沒有可再發行組件包x64, 2.要在該機器上運行64位應用程序(由visual studio 2008 sp1構建),是否需要該可再發行組件包?

redistibutable package x64和64位應用程序之間的關係是什麼?

回答

1

在許多情況下,您可以將您的程序靜態地鏈接到C運行時庫。在這種情況下,不需要可再分發包,因爲所有必要的功能都被複制到應用程序的可執行文件中。如果你動態地鏈接它,你應該在應用程序中提供可再發行組件包。儘管許多其他應用程序也這樣做,但不能保證目標系統上有必要的運行時可用。

您可以在「C/C++>代碼生成>運行時庫」下的項目設置對話框中更改與運行時鏈接的方式。

下面的MSDN文章解釋瞭如何重新分配必要的VC++文件:http://msdn.microsoft.com/en-us/library/ms235299%28v=vs.80%29.aspx

+0

非常感謝... – Raj

2

首先,這要求存在32位和64位代碼。對於32位代碼和其他人在你之前安裝它,你可能會更幸運。就像VS安裝程序在你的開發機器上一樣。

它是由編譯器設置引起的。項目+屬性,C/C++,代碼生成,運行時庫設置。 VS中的所有項目模板都在/ MD處具有此設置。您可以將其更改爲/ MT,並且不再依賴運行時DLL,如msvcr90.dll。運行時庫代碼將鏈接到您的程序中,而不是依賴目標機器上存在的DLL。

但是您必須小心,/ MD設置是安全設置。它確保您在創建自己的DLL並編寫返回C++對象(如std :: string)或必須由調用方釋放的指針的代碼時不會遇到麻煩。如果DLL和EXE每個都有自己的CRT拷貝鏈接到它們,這將不會很好。他們將使用不同的堆,釋放堆中的指針無法正常工作。 XP上的無聲泄漏,Vista和崩潰的崩潰。

可再發行的.exe實際上是一個可下載的安裝程序,當您忘記爲程序編寫安裝程序時,客戶可以使用它。更好的解決方案是讓你編寫一個安裝程序,以便正確複製和安裝所有東西。它只需不到一分鐘即可完成。將安裝和部署+安裝項目添加到您的解決方案。右鍵單擊它,添加,項目輸出。項目+屬性,先決條件並勾選「Visual C++運行時庫(x64)」複選框。如果您更喜歡創建自己的安裝程序,那麼您可以使用C:\ Program Files文件(x86)\ Common Files \合併模塊中的合併模塊

哦,並部署Release版本,而不是Debug版本。 CRT的調試版本不可分發。

+0

謝謝你的簡要說明。謝謝 :) – Raj

相關問題