ID Number: Q73663
5.03 5.05 5.10 5.11 | 5.03 5.05 5.10 5.11
MS-DOS | OS/2
buglist5.03 buglist5.05 buglist5.10 buglist5.11 fixlist5.13
Summary:
The Microsoft LINK utility versions 5.03, 5.05, 5.10, and 5.11 will
generate the following error if you attempt to link a resource-only
DLL that contains no code or data:
LINK: error L2049: no segments defined
Although a valid DLL is created in this case, these versions of LINK
set the error bit in the DLL's header and return an error code to the
calling program.
Beginning with LINK version 5.13, the L2049 error was converted to a
warning and the error bit is no longer set in the output file. To work
around the problem with LINK 5.03, 5.05, 5.10, or 5.11, the EXEHDR
utility may be used to reset the error bit in the header.
More Information:
A resource-only DLL does not contain code or data--it is only used to
store bitmaps, menus, fonts, and other static resources, but LINK
versions 5.03, 5.05, 5.10, and 5.11 flag the lack of segments with an
L2049 error and mark the output file as invalid.
To use the DLL, you can use EXEHDR to turn off the error bit by
invoking it with the /RESET option. For example:
EXEHDR /RESET RESOURCE.DLL
The most efficient method is to add this statement to the description
block in your makefile that contains the LINK command. For example:
test.dll: test.obj test.def
link test,test.dll,,,test.def;
exehdr /reset test.dll
Note that in order to stop NMAKE from terminating with the error code
from LINK, you should use either the /I (ignore exit codes) switch
when invoking NMAKE, specify the .IGNORE directive inside the
makefile, or add a dash (-) before the LINK command to indicate that
processing the makefile should continue even if there is an error with
the link step. See your NMAKE documentation for further information
about the /I option, the .IGNORE directive, and the dash operator.
Microsoft has confirmed this to be a problem in LINK versions 5.03,
5.05, 5.10, and 5.11. This problem was corrected in LINK version 5.13.