Microsoft KB Archive/48840

Linking with C 5.10 VARSTCK.OBJ Causes L2044 Error ID Number: Q48840

5.10 | 5.10 MS-DOS | OS/2 buglist5.10 fixlist6.00

Summary:

When linking with the VARSTCK.OBJ module from C version 5.10 to allow for a variable stack, the fatal error “L2044: symbol multiply defined, use /NOE” occurs. The following three functions are multiply defined:

__nfree __asegds __nmalloc

To work around this error, you must use the library manager, LIB.EXE, to replace the functions multiply defined from nmalloc.asm in the standard library with the functions in (S,M,C,L)VARSTCK.OBJ.

The following is an example for small memory model using math emulation:

COPY slibce.lib slibce.old  LIB slibce.lib -nmalloc+svarstck; 

More Information:

When the heap runs out of memory, it tries to use available stack space until it runs into the top of the stack. When the allocated space in the stack is freed, it is available once again to the stack. Note that while the heap can employ unused stack space, the reverse is not true; the stack CANNOT employ unused heap space. (See the “Microsoft C 5.1 User’s Guide,” page 105.)

If you use the /NOE switch on the link line as the error message suggests, you will receive another fatal error “L2025: symbol defined more than once.” You must use the library manager LIB.EXE to replace the functions that are multiply defined in order to clear these fatal errors.

Microsoft has confirmed this to be a problem in C version 5.10. This problem was corrected in C version 6.00.