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

M

Maxwell

Hello,

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>
#include<string>

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

using namespace System;
using namespace std;

namespace ManagedLib
{
public __gc class Class1
{
public:
Class1(){};
~Class1(){};

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

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

Linking...
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 ->

http://msdn.microsoft.com/library/d...tsFromPureIntermediateLanguageToMixedMode.asp

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..

Regards

Max
 
M

Maxwell

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
respectively
3. Removed the nochkclr.obj
4. Add /noentry to the Additional Options field of the Command Line
page

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

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