Misc linker errors when moving to /clr

R

ralphsieminsky

A project compiles fine under VS 2005 RC without the /clr
option. However, when /clr is turned on several errors appear:

- A symbol exported from a DLL is not found by another
DLL referencing it.

The name of the symbol present in the DLL, as shown by
depends.exe is ?Apply@ScreenContext@@SGPAV1@PAUHWND__@@@Z

But the name of the symbol the linker looks for when
it tries to build the DLL depending on it is
?Apply@ScreenContext@@$$FSGPAV1@PAUHWND__@@@Z

Strangely enough, the two symbol have exactly the same
undecorated name

- The second error is the following
mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined
in msvcrtd.lib(dllmain.obj)

http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652
seems to talk about it, but there is no way I could get
to make its workarounds solve the problem (the instructions don't apply
to VS2005). But why would it manifest itself only in /clr mode ?


Any clue is much appreciated !

Cheers,
Ralph
 
B

bonk

R

ralphsieminsky

Thanks for this, bonk. The workaround did not work for
me but the comments helped me get a version to compile
....in Release Mode. All the issues have disappeared.

So the linker problems seem to apply to Debug Mode only.

For information, in Debug Mode I also had other
unresolved tokens, for symbols that happened to
be #included through header files but actually
not referenced in the code. Putting the linker
in verbose mode revealed that it was looking for
those symbols during a "Search transition" phase.
Thus possibly the linker is trying to resolve more
symbols than required in Debug Mode.

Cheers,
Ralph
 
R

ralphsieminsky

Ahem, I'd like to recall my previous message, because
the /clr option was not applied to all subprojects in
Release Mode (probably my mistake)...

The issues are the same in Release Mode as in Debug Mode.

Cheers,
Ralph
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top