2010-04-24 104 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次,理论上速度/容量理论上翻倍了。