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 <ENTER>

LIB slibce.lib -nmalloc+svarstck; <ENTER>

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.