469,651 Members | 1,647 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,651 developers. It's quick & easy.

std::map<std::string, std::string> produces complie errors Managed C++ Class Library


I having having oodles of trouble using the std lib in my MC++ (VS.NET
2003) Class library. I figured out a simple sample to reproduce the
errors I am having. Create a MC++ (VS.NET 2003) class library and type
in the following code below:

#include <map>

using std::string;
using std::map;

using namespace System;
using namespace std;

namespace ManagedLib
public __gc class Class1

void DoNativeHashMap()
std::map<std::string,std::string> x;

when I go to complie this I get the following errors:

LINK : error LNK2020: unresolved token (0A000008) ??_7type_info@@6B@
LINK : error LNK2020: unresolved token (0A000009) _CxxThrowException
LINK : error LNK2020: unresolved token (0A00000A) exception.__ctor
LINK : error LNK2020: unresolved token (0A00000C) exception.__dtor
LINK : error LNK2020: unresolved token (0A00000E) delete
LINK : fatal error LNK1120: 5 unresolved externals

Ok so I figured this must have something to do with std::map because
when I just have std::string everything is beautiful.

So I add a reference to msvcrtd.lib (for debug config) and msvcrt.lib
(for release config) thinking that would do the trick then the errors
go awy but I then get this warning (not error):

ibcpmtd.lib(xlock.obj) : warning LNK4210: .CRT section exists; there
may be unhandled static initializers or terminators

I looked on the msdn site and found something about Converting Managed
Extensions for C++ Projects from Pure Intermediate Language to Mixed
Mode ->


I just can't imagine this is what one would have to do to use teh
std::map or std::set in a MC++ class library...

Can someonw confirm this...Please say it aint so :(

Help help would definitely be appretiated..



Nov 23 '05 #1
1 3439
Ok, So I did some additonal playing around after lookiing through that
MS article like 34 times while pulling my hair out :). I think i might
have answered my own question, but can anyone confirm this behavor?
Again I I am trying to do is us objects in the standard template lib no
fancy win32 API calls or AFX stuff, etc. Just stuff like std::list,
std::string, std::map, std::vector, etc. Everything complied and
"seems" to be running fine. I guess the only thing I did not do is add
the entry points song and dance and call some kind of ::intialize and
::terminate method as they described in the MS article.

I am a little worried (even though everything is working right now)
that because I didnt initialize the whatever static library variables
that CRT might require via ::intialize and ::terminate that I might run
into problems but figured since I am only trying to use the basic
std::string, std::map, etc type stuff that it shouldn't be a problem?

Anyway Here is what I did:

Went to the project properties pages ->Linker->Input:
1. Added __DllMainCRTStartup@12 to Force Symbol References
2. Added msvcrt.lib and msvcrtd.lib to Release and Debug configurations
3. Removed the nochkclr.obj
4. Add /noentry to the Additional Options field of the Command Line

Can Anyone confirm this or have they tried to access std::map in
managed c++ in vs.net2003?

Nov 26 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by gipsy boy | last post: by
19 posts views Thread by Erik Wikström | last post: by
4 posts views Thread by lada77 | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.