在Visual Studio 2008中編寫了一個CGI應用程序並在本地對其進行了刪除後,我將其上傳到了Windows Server 2003操作系統,並且該系統很快無法運行。在沒有運行時可再發行組件的情況下運行C++二進制文件(Server2k3,XPSP3)
我猜我需要安裝猥瑣運行時間分配,但看完這個:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
我想知道如果它更有意義的方面的東西忽略這一邊,只是重新寫應用程序。
我猜Windows Server 2003沒有我需要的MSCRVT版本? Windows Server 2003有嗎?
當涉及到部署胖客戶端時,我想用我的應用程序分發所需的dll。 他們假設我只是包括iostream,sstream,字符串?
如果我添加windows.h,它會發生顯着變化嗎?
補充:
使用/ MT開關建議採取以下
C/C++ - >代碼生成 - >運行時庫 - >多線程(/ MT)
(你可能會需要做一個乾淨的:
建設 - >清潔
,以避免該錯誤消息
「無法將更新的清單保存到文件中」)
臃腫我的應用程序從38k到573k。那就是我所說的重要(想象一下,如果那是你的薪水)。由於此應用程序的許多實例將不斷加載和卸載(需要寶貴的內存和處理器資源),我希望找到更好(更小)的解決方案。
我知道這對於今天的很多情況並不重要,而不是許多開發人員的重點,因此趨勢是.NOT和60MB運行時間,但這是我想要做的。
補充:
去除調試拿到項目進行編譯後:
項目 - >化子性質 - > C/C++ - >預處理器 - >預處理器定義(去掉DEBUG;)
大小減少到300k,並且會運行。
補充: 正如下面克里斯·貝克建議,複製: msvcm90.dll msvcp90.dll MSVCR90.DLL Microsoft.VC90.CRT.manifest 要在應用程序的目錄將提供所需的全部運行。
使用Visual Studio 6已經提出了幾次,但它不支持Vista(或我們假設的Windows 7)。其他不需要運行時分發的解決方案可能是我的MASM,甚至是Basic的。不幸的是,這打破了使用像C++這樣的高級OOP語言的目的。
只要我需要安裝C++可再發行組件,折衷額外是260k。那是可以接受的
是否*什麼*變化顯着?幾乎所有你用VS2008編譯的東西都需要運行時安裝。 – Joe 2009-10-17 01:58:52
無論發生什麼,您都將需要運行時。你的選擇是*你如何包含它。最方便的方法是使用靜態鏈接的版本。那麼你根本不必分發一個單獨的dll。如果沒有,你有50萬種方法來分發DLL。從需要閱讀15頁文檔的超級複雜並行事物,到將其放入應用程序根文件夾中具有正確名稱的文件夾中,這非常易於管理。 – jalf 2009-10-17 10:18:22
我不確定這將是多麼有效,但嘗試擺弄編譯器/鏈接器選項。有一些影響了可執行文件的大小(關於優化大小和刪除未使用的東西)。 – 2009-10-18 08:38:15