INFO: What Causes the Startup Code to Be Included (43646)
The information in this article applies to:
- The C Run-Time (CRT), when used with:
- Microsoft C for MS-DOS 6.0
- Microsoft C for MS-DOS 6.0a
- Microsoft C for MS-DOS 6.0ax
- Microsoft C/C++ for MS-DOS 7.0
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 5.0
- Microsoft Visual C++, 32-bit Editions 6.0
This article was previously published under Q43646 SUMMARY
The object modules created by the Microsoft C Compiler versions 5.1 and
earlier contain a reference to the variable _acrtused. This variable causes
the linker to bring in the C startup code. To not link the C startup code,
it is necessary to define _acrtused as follows:
int _acrtused = 0;
Object modules created with the Microsoft C Compiler for MS-DOS, version
6.0, 6.0a, or 6.0ax only have a reference to the _acrtused variable if the
source file contains a function called main(). In addition, C/C++ versions
7.0 and 8.0 for MS-DOS generate the reference for files containing a
WinMain() or LibMain() function.
For 32-bit targets, __acrtused is not used. Instead, the linker must be
told what entry point name to use. The Visual C++ for Windows NT linker
picks the name based on the executable type. With the Windows Software
Development Kit (SDK) linker, the correct entry point must be specified in
the makefile or on the command line. The three entry points are:
Executable Type Entry Point Entry Point Name
----------------------------------------------------
Console main() _mainCRTStartup
Windows WinMain() _WinMainCRTStartup
DLL DllMain() _DllMainCRTStartup@12
MORE INFORMATION
With Visual C++ 2.x and above, if a DLL project specifies an entry point
and attempts to call a CRT function, the linker issues error LNK2001
because it is looking for main(). To successfully link the DLL, remove the
project setting for entry point. As mentioned in the SUMMARY,
_DllMainCRTStartup is the correct entry point.
Modification Type: | Major | Last Reviewed: | 12/12/2003 |
---|
Keywords: | kbCRT kbinfo KB43646 |
---|
|