2010-04-24 110 views
0

我有VS 2008,我希望我的應用程序能夠使用Windows 98而不需要包含MSVCR90.dll .. Win98自帶了MSVCR60,所以我怎麼能告訴MSVC做到這一點?我唯一的選擇是尋找Visual Studio 6嗎?使用舊版本的MSVCR?

感謝

*我也想避免靜態鏈接msvcr

+0

哈哈!我第一次讀這個問題時,我以爲是在談論錄像帶。 – 2010-04-24 23:12:41

+0

lol :-p我想只是靜態鏈接它.... – jmasterx 2010-04-24 23:14:56

回答

4

你不能告訴Visual Studio中使用運行時庫的早期版本。即使您可以使用舊庫進行編譯,應用程序本身也不會正常運行,因爲編譯器會將調用插入到預期位於庫中的函數中,可能並非如此。

另外我想避免靜態鏈接msvcr
爲什麼?這似乎是解決這個問題的完美解決方案。當然,你爲它支付了大約100kb的代碼大小,但是值得一提的是它被迫使用Visual Studio 6的bug和不合格的編譯器。

您也可以只包含MSVC++可再發行組件,它將包含正確的DLL並且不需要標準庫的靜態鏈接。

+0

VS2008仍然與libCtiny一起工作; ,可以讓你到4-8 KB – MSalters 2010-04-26 12:32:11

+0

@MSalters(未開銷,磁盤上的整個應用程序的大小!):是的,但如果你依靠CRT的功能,那麼你會出現在libctiny非常驚訝:(但要使用VS2010它可用之前 – 2010-04-26 12:41:14

+0

顯然重修甚至libctiny需求。當然,你可以再後來添加靜態庫,因此將只用於不libCtiny提供的CRT功能。但是,如果真正的問題是關於C++,然後是C LIB更換隻是故事的一半反正 – MSalters 2010-04-26 13:03:41

1

如果要面向Windows 98,你的選擇是:

  • 首先,Visual Studio 2005中2008年的最高版本,並加蓋了在EXE頭版本5.0的最低OS - Windows 98將根本就沒有加載由VS 2008

得到的二進制文件至於CRT分佈:

  • 分發新的運行時間與您的應用程序。如果你的應用有很多dll,我更喜歡這種方法,因爲靜態鏈接使得整個應用都比需要的大。另外,如果你至少在一個進程的所有模塊之間共享一個c-runtime實現,那麼使用dll的C++有很多限制。

如果你不是一個「重」用戶C++功能,如異常,和STL,你也許可以在任何CRT不連接在所有脫身。否則你的選擇是:

  1. 使用非MS編譯器,如MinGW。 MinGW使用最新的GCC,因此您可以獲得C99和C++ 98,C++ 03,TR1等,並使用msvcrt.dll。 Code :: Blocs是一個「OK」的IDE,如果你從未使用過 Visual Sutdio和/或對頭部進行了太多打擊。
  2. 下載Windows DDK。您需要從命令行編譯,並使用make文件弄髒,但它是免費的,DDK使用VS2005編譯器&鏈接器,但是專門設置爲鏈接到msvcrt.dll,而不是msvcr80.dll。這被認爲是過於冒險的,要求設備驅動程序與可能不存在的運行時鏈接。
  3. Visual Studio 6作爲最終的後備選項。恐怖的C++ 98可怕的支持。至少你會得到一個漂亮的IDE,現在它已經開始運行了8次,理論上速度/容量理論上翻倍了。