PRB: Unresolved External Error Compiling for MOVE Environment

Last reviewed: July 17, 1997
Article ID: Q92869
7.00 | 1.00 1.50 MS-DOS | WINDOWS kbprg kbprb

The information in this article applies to:

  • Microsoft C/C++ for MS-DOS and Windows, version 7.0,
  • Microsoft Visual C++ for Windows, versions 1.0 and 1.5

SYMPTOMS

When an application implements the MOVE overlay scheme by defining MOVE_ENV, compiling the MOVEINIT.C file, and linking MOVEINIT.OBJ with the other files of the application, linking fails with the following error message:

   L2029: '__movesegenv' unresolved external

CAUSE

The default medium memory model and large memory model libraries do not support MOVE_ENV.

RESOLUTION

Link the application with the MOVETR.LIB file.

MORE INFORMATION

The MOVE overlay scheme supports using environment variables to specify the size of the overlay heap and overlay caches at run time. The MOVEAPI.TXT file distributed with Microsoft C/C++ version 7.0 and the MOVEAPI.WRI file distributed with Microsoft C/C++, versions 8.0 and 8.00c detail the required procedure.

To implement the MOVE overlay scheme, define MOVE_ENV and compile the MOVEINIT.C file. Link the MOVEINIT.OBJ file with MOVETR.LIB and the other files of your application. The text below lists the commands to compile and link the files. Note that the /Gs switch is used to eliminate calls to the stack-checking routine because the initialization in MOVEINIT occurs before the C run-time library initialization occurs.

   cl /c /AM /DMOVE_ENV /Gs moveinit.c
   link <objs> moveinit.obj,,,movetr.lib,project.def

When MOVE_ENV is defined, MOVEAPI.H declares the following variable:

   extern unsigned short __far __cdecl _movesegenv;

To avoid receiving an unresolved external error, the application must define the _movesegenv symbol in moveinit() to contain the segment address of the environment. The following three steps define _movesegenv:

  1. Define _movesegenv as a global variable, as follows:

          unsigned short __far _movesegenv;
    

  2. Define the OffsetEnv symbol to be the offset in the program segment prefix (PSP) of the segment address of the environment, as follows:

          #define OffsetEnv 2Ch
    

  3. Note that MOVEINIT.C is divided into two parts. The first part is compiled when MOVE_ENV is not defined. The second part begins on line 175 and is used when MOVE_ENV is defined. Line 175 is as follows:

          #else /* MOVE_ENV */
    

    Make the following two modifications to the start of the moveinit() function in the second part of the file:

    a. Retrieve the segment address of the PSP into BX, as follows:

          _asm {
    
             MOV ah, 51h                     ; Get PSP
             INT 21h
          }
    
       b. Retrieve the address of the environment from the OffsetEnv
          location in the PSP and store the address in _movesegenv, as
          follows:
    
          _asm {
             MOV es, bx                      ; Contains seg of PSP
             MOV ax, WORD PTR es:OffsetEnv   ; Get seg of environment
             MOV bx, SEG _movesegenv         ; Get seg of _movesegenv
             MOV es, bx                      ;     since it is far
             MOV es:_movesegenv, ax          ; Store seg in _movesegenv
          }
    


Additional reference words: 7.00 8.00 8.00c 1.00 1.50 Visual
KBCategory: kbprg kbprb
KBSubcategory: MoveOverlay
Keywords : kb16bitonly


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.

Last reviewed: July 17, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.