Q40485: Error L2025: Symbol Defined More than Once
Article: Q40485
Product(s): See article
Version(s): 5.10 | 5.10
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | | mspl13_basic
Last Modified: 20-JAN-1989
Problem:
I cannot link a function name in my object file with a library
containing that same function name and have the resulting EXE call my
function and not the library's.
I am using /NOE; however, I receive the following error:
(...): error L2025: (my function name) : symbol defined more than once
pos: (some number) Record type: 53E8
Response:
You can only perform this task if the function name is an individual
module. The following procedure demonstrates the error:
1. Create a file CALL.C that calls functions A() and B().
2. Create functions A() and B() in fileA.c and fileB.c, and compile
them to objects.
3. Do the following to create TEST.LIB:
LIB TEST +fileA +fileB, test.lst
4. Change B() in fileB.c and compile the following:
cl call.c fileB.c test.lib /link /NOE /INF
You will have an EXE that calls A() from the library and B() from
your modified fileB.c.
5. Combine fileA.c and fileB.c into one file called TEST.C.
6. Compile to object code.
7. Delete the old TEST.LIB, and do the following:
LIB TEST +test, test.lst
(Normally you would change fileB.c, but this is not necessary here.)
cl call.c fileB.c test.lib /link /NOE /INF
You will receive the following error:
TEST.LIB(test.c) : error L2025: _B : symbol defined more than once
pos: 13E Record type: 53E8
There was 1 error detected
When you encounter this error, it is usually because the function you
are trying to overwrite is part of a set appearing in one module.
The library listing looks as follows in the first case:
_A................fileA _B................fileB
fileA Offset: 00000010H Code and data size: 95H
_A
fileB Offset: 000002a0H Code and data size: 92H
_B
You will be able to replace A() or B(). The listing in the
second example looks as follows:
_A................test _B................test
test Offset: 00000010H Code and data size: deH
_A _B
You will not be able to replace either A() or B() without removing the
TEST module with the LIB utility. You may have to provide replacements
for both functions and not just the one you want to change. For more
information, query on the following words in this KnowledgeBase:
L2029 unresolved externals
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.
Copyright Microsoft Corporation 1986-2002.