实验环境:Windows XP Microsoft Visual Studio 6.0 Enterprise Edition
参考网上文档《BUG:重新生成静态和动态 C 运行时库时出现问题》
假设VC是安装在E:/Program Files/Microsoft Visual Studio
1. 源代码的安装及配置文件的修改CRT
1.
安装VC6 CRT 源代码
l
在开始菜单上,单击控制面板,然后单击添加或删除程序。
l
当前安装的程序列表中,选中 Microsoft Visual C++ 6.0,单击更改/删除。
l
在出现的Visual C++ 6.0 Enterprise - Maintenance对话框中,选中左边的Microsoft Visual C++ 6.0,然后单击右边的 Change Option 按钮。
l
接下来又出现一个 Visual C++ 6.0 Enterprise - Maintenance对话框,选中左边列表中第二项:VC++ Runtime Libraries,然后单击右边的 Change Option 按钮。
l
接下来再次出现一个 Visual C++ 6.0 Enterprise - Maintenance对话框,选中左边列表中第三项:CRT Source Code,然后单击确定。
注意:直接将VC安装光盘的CRT目录拷贝到目的地可能无法正常编译的。
2.
将以下三个文件从 Visual C++ 安装 CD-ROM 手动复制到 E:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC:
• Makefile
• Makefile.inc
• Makefile.sub
3.
在文本编辑器(如UltraEdit)中,对 Makefile 文件进行下列更改:
l
更改从第 38 行开始的三行代码
!if "$(V6TOOLS)"==""
V6TOOLS=/MSDEV
!endif
修改为:
!if "$(V6TOOLS)"==""
V6TOOLS=E:/Program Files/Microsoft Visual Studio/VC98
!endif
注意:不要用双引号将指定路径括起来。
l
默认情况下,第 331 行看上去是这样: RC_INCS=-I$(V6TOOLS)/include
如果 Visual C++ 6.0 安装目录名含有空格,必须更改第 331 行,添加双引号,修改为:
RC_INCS=-I"$(V6TOOLS)/include"
l
在 Makefile 文件中搜索带 $(V6TOOLS)/include/winver.h / 的行,然后删除这些行(共有6行)
2. 配置VC命令行编译环境
4.
编辑E:/Program Files/Microsoft Visual Studio/VC98/Bin/Vcvars32.bat
为什么要修改Vcvars32.bat,因为现存的内容可能是这样:
set VSCommonDir=E:/PROGRA~1/MICROS~1/Common
而实际上在PROGRA~1里面,可能装了Microsoft Office、Microsoft Visual Studio……
按照MICROS~1来找VC路径可能找不到。
修改后的样子类似:
@echo off
rem
rem Root of Visual Developer Studio Common files.
set VSCommonDir=E:/Program Files/Microsoft Visual Studio/Common
rem
rem Root of Visual Developer Studio installed files.
rem
set MSDevDir=E:/PROGRAM FILES/MICROSOFT VISUAL STUDIO/Common/msdev98
rem
rem Root of Visual C++ installed files.
rem
set MSVCDir=E:/PROGRAM FILES/MICROSOFT VISUAL STUDIO/VC98
rem
rem VcOsDir is used to help create either a Windows 95 or Windows NT specific path.
rem
set VcOsDir=WIN95
if "%OS%" == "Windows_NT" set VcOsDir=WINNT
rem
echo Setting environment for using Microsoft Visual C++ tools.
rem
if "%OS%" == "Windows_NT" set PATH=%MSDevDir%/BIN;%MSVCDir%/BIN;%VSCommonDir%/TOOLS/%VcOsDir%;%VSCommonDir%/TOOLS;%PATH%
if "%OS%" == "" set PATH="%MSDevDir%/BIN";"%MSVCDir%/BIN";"%VSCommonDir%/TOOLS/%VcOsDir%";"%VSCommonDir%/TOOLS";"%windir%/SYSTEM";"%PATH%"
set INCLUDE=%MSVCDir%/ATL/INCLUDE;%MSVCDir%/INCLUDE;%MSVCDir%/MFC/INCLUDE;%INCLUDE%
set LIB=%MSVCDir%/LIB;%MSVCDir%/MFC/LIB;%LIB%
set VcOsDir=
set VSCommonDir=
|
5.
在命令提示符下,运行批处理文件vcvars32,如下:
D:/Documents and Settings/zq>e:
E:/>cd/Program Files/Microsoft Visual Studio/VC98/Bin
E:/Program Files/Microsoft Visual Studio/VC98/Bin>vcvars32.bat
Setting environment for using Microsoft Visual C++ tools.
6.
在命令提示符下,先转到Program Files/Microsoft Visual Studio/Vc98/Crt/Src 目录,然后运行nmake,如下:
E:/Program Files/Microsoft Visual Studio/VC98/Bin>CD/Program Files/Microsoft Vis
ual Studio/Vc98/Crt/Src
E:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC>nmake
NMAKE 生成所有的静态和动态库。这些库位于 E:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC/Build/Intel 目录中。
3. 总结:
7.
操作步骤总结
序号
|
步骤
|
说明
|
1
|
安装VC6 CRT 源代码
|
|
2
|
复制Makefile/Makefile.inc/Makefile.sub等文件
|
|
3
|
修改Makefile文件
|
注意不要注释$(V6TOOLS)/include/winver.h /
|
4
|
修改Vcvars32.bat
|
|
8.
MSDN上关于C run-time library的说明:
C run-time library (without iostream or standard C++ library)
|
Characteristics
|
Option
|
Preprocessor directives
|
LIBC.LIB
|
Single-threaded, static link
|
/ML
|
|
LIBCMT.LIB
|
Multithreaded, static link
|
/MT
|
_MT
|
MSVCRT.LIB
|
Multithreaded, dynamic link (import library for MSVCR71.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP71.DLL to run.
|
/MD
|
_MT, _DLL
|
LIBCD.LIB
|
Single-threaded, static link (debug)
|
/MLd
|
_DEBUG
|
LIBCMTD.LIB
|
Multithreaded, static link (debug)
|
/MTd
|
_DEBUG, _MT
|
MSVCRTD.LIB
|
Multithreaded, dynamic link (import library for MSVCR71D.DLL) (debug)
|
/MDd
|
_DEBUG, _MT, _DLL
|
9.
最后得到的主要文件(E:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC/build/intel)
序号
|
生成的文件
|
等价于原有的文件
|
1
|
libc.lib
|
LIBC.LIB
|
2
|
libcmt.lib
|
LIBCMT.LIB
|
3
|
libcd.lib
|
LIBCD.LIB
|
4
|
libcmtd.lib
|
LIBCMTD.LIB
|
5
|
_sample_.lib
|
MSVCRT.LIB
|
6
|
_sampld_.lib
|
MSVCRTD.LIB
|
7
|
_sample_.dll
|
MSVCRT.DLL
|
8
|
_sampld_.dll
|
MSVCRTD.DLL
|
Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1672012