DOCUMENT:Q315535 06-AUG-2002 [visualc]
TITLE :BUG: Problems When You Rebuild Static and Dynamic CRT Libraries
PRODUCT :Microsoft C Compiler
PROD/VER::6.0
OPER/SYS:
KEYWORDS:kbCompiler kbCRT
======================================================================
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, 32-bit Editions, version 6.0
-------------------------------------------------------------------------------
SYMPTOMS
========
When you try to rebuild the Visual C++ 6.0 C Runtime (CRT) Libraries (Static or
Dynamic), you may experience some problems.
NOTE: Microsoft does not recommend rebuilding the CRT libraries. Microsoft may
not be able to provide support for problems encountered when using rebuilt CRT
libraries. You are not permitted to redistribute a rebuilt DLL with the same
name used by Microsoft.
CAUSE
=====
Makefile contains extra lines that cause errors during rebuild. Also, Makefile
contains entries that are not valid.
RESOLUTION
==========
To work around these errors, you must perform the following procedures:
Prerequisites
-------------
1. The default installation of Visual C++ 6.0 does not install the CRT Source
code directory. If you copy this directory manually from the installation
CD-ROM, the directory tree will not be set properly. To install the CRT
Source directory, follow these steps:
a. On the Start menu, click Control Panel, and then click Add or Remove
Programs.
b. On the Currently Installed Programs list, click Microsoft Visual C++ 6.0.
c. Click Change/Remove.
d. In the Visual C++ 6.0 Setup dialog box, click Add/Remove.
e. Click to select CRT Source Code.
f. Click OK.
2. Manually copy the following files from the Visual C++ installation CD-ROM to
C:\Program Files\Microsoft Visual Studio\Vc98\Crt\Src:
- Makefile
- Makefile.inc
- Makefile.sub
NOTE: By default, Visual C++ is installed in the C:\Program Files\Microsoft
Visual Studio folder. If you have installed Visual C++ in another location,
make sure that you modify the path in all of the examples in this article.
3. Change the file attributes of Makefile in C:\Program Files\Microsoft Visual
Studio\Vc98\Crt\Src. To do this, follow these steps:
a. In Windows Explorer, right-click Makefile, and then click Properties.
b. Click to clear the check box for the Read-only file attribute.
c. Click OK.
4. In a text editor such as Notepad, make the following changes to Makefile:
a. Change the three lines that start at line 38 so that they resemble the
following sample code:
#!if "$(V6TOOLS)"==""
V6TOOLS=C:\Program Files\Microsoft Visual Studio\vc98
#!endif
NOTE: Do not place double-quotes around the path designation.
b. By default, line 331 appears as follows:
RC_INCS=-I$(V6TOOLS)\include
If the name of your Visual C++ 6.0 installation directory contains spaces, then
you must change line 331 by adding double quotes as follows:
RC_INCS=-I"$(V6TOOLS)\include"
c. Search for every instance of Winver.h in Makefile, and then use the #
symbol to comment out each line that includes Winver.h, as shown in the
following sample code:
# $(V6TOOLS)\include\winver.h \
5. Save your changes to Makefile, and then close the text editor.
Steps to Rebuild the Libraries
------------------------------
The environment must be configured properly before you can rebuild Makefile. To
configure the environment, and then rebuild Makefile, follow these steps:
1. If the Visual C++ environment variables are not set, then run the following
batch file:
C:\Program Files\Microsoft Visual Studio\Vc98\Bin\Vcvars32.bat
NOTE: You may have to increase the environment space if your operating system
is Microsoft Windows 95, Microsoft Windows 98, or Microsoft Windows
Millennium Edition (Windows Me). For additional information, click the
article number below to view the article in the Microsoft Knowledge Base:
Q248802 PRB: Vcvars32.bat Generates Out of Environment Message
NOTE: If your computer has multiple versions of the C++ compiler (Cl.exe), run
Vcvars32.bat to avoid unexpected results that may occur if you use the Visual
C++ .NET compiler instead of the Visual C++ 6.0 compiler.
2. At a command prompt, go to the C:\Program Files\Microsoft Visual
Studio\Vc98\Crt\Src directory, and then run the command NMAKE. NMAKE builds
all of the static and dynamic libraries. The libraries are placed in the
C:\Program Files\Microsoft Visual Studio\Vc98\Crt\Src\Build\Intel directory.
NOTE: You can run the command Bldnt.cmd instead of NMAKE. However, if you are
building Makefile on a computer running Windows 95, Windows 98, or Windows
Me, then you must run the batch file Bldwin95.bat instead of Bldnt.cmd.
By default, Makefile builds Msvcrt.dll as _sample_.dll, Msvcrtd.dll as
_sampld_.dll, Msvcrti.dll as _sample_i.dll, and so on.
Makefile contains the following entries for the default names. If you want to
change the default library names, change them in Makefile first. Be careful
about your choice of names because some names have leading underscores and you
must find the corresponding names in other files.
- RETAIL_DLL_NAME=_sample_
- RETAIL_LIB_NAME=_sample_
- RETAIL_DLLCPP_NAME=sample_p
- RETAIL_LIBCPP_NAME=sample_p
- RETAIL_DLLIOS_NAME=sample_i
- RETAIL_LIBIOS_NAME=sample_i
- DEBUG_DLL_NAME=_sampld_
- DEBUG_LIB_NAME=_sampld_
- DEBUG_DLLCPP_NAME=sampld_p
- DEBUG_LIBCPP_NAME=sampld_p
- DEBUG_DLLIOS_NAME=sampld_i
- DEBUG_LIBIOS_NAME=sampld_i
The following are the corresponding .rc and .def files with the default names:
- Sampld_i.def
- Sampld_p.def
- Sample_i.def
- Sample_i.rc
- Sample_p.def
- Sample_p.rc
- _sample_.rc
- _sample_.def
- _sampld_.def
These files are located in the following directories:
- C:\Program Files\Microsoft Visual Studio\Vc98\Crt\Src
- C:\Program Files\Microsoft Visual Studio\Vc98\Crt\Src\Intel
You can rename these files to the names that you want. To do this, open the
individual files, one at a time, and then change the corresponding names in the
files to reflect the new names that you give to the files themselves. For
example, if you want to change the default library name, Open _sample_.def. The
file has the following line:
LIBRARY _SAMPLE_
Modify that line to the library name that you want to use, such as the
following:
LIBRARY mycrtlibname
When you finish building the library, your application links to the resulting
import library, .lib.
STATUS
======
Microsoft has confirmed that this is a bug in the Microsoft products that are
listed at the beginning of this article.
REFERENCES
==========
For additional information, click the article number below to view the article
in the Microsoft Knowledge Base:
Q234622 PRB: VC++ 6.0 Setup Does Not Copy the CRT Make Files
Additional query words:
======================================================================
Keywords : kbCompiler kbCRT
Technology : kbVCsearch kbAudDeveloper kbVC600 kbVC32bitSearch
Version : :6.0
Issue type : kbbug
Solution Type : kbnofix
=============================================================================
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 2002.