MapIterator and ConstMapIterator causing linker problems

Bren

03-03-2006 23:11:15

Trying to build Plugin_PagingLandScapeSceneManager2, I'm having the same problem reported in this thread: http://www.ogre3d.org/phpBB2addons/viewtopic.php?t=214.

It's unclear though how rweiss resolved the problem.

I'm building PLSM2 from http://tuan.kuranes.free.fr/Ogre.html against OGRE 1.0.7 Stable (Azathoth).


------ Build started: Project: Plugin_PagingLandScapeSceneManager2, Configuration: Release Win32 ------
Linking...
Creating library ..\bin\Release/Plugin_PagingLandScapeSceneManager2.lib and object ..\bin\Release/Plugin_PagingLandScapeSceneManager2.exp
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual class Ogre::MapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::Node *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::Node *> > > > __thiscall Ogre::Node::getChildIterator(void)" (__imp_?getChildIterator@Node@Ogre@@UAE?AV?$MapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual class Ogre::ConstMapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::Node *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::Node *> > > > __thiscall Ogre::Node::getChildIterator(void)const " (__imp_?getChildIterator@Node@Ogre@@UBE?AV?$ConstMapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual class Ogre::MapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::MovableObject *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::MovableObject *> > > > __thiscall Ogre::SceneNode::getAttachedObjectIterator(void)" (__imp_?getAttachedObjectIterator@SceneNode@Ogre@@UAE?AV?$MapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual class Ogre::ConstMapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::MovableObject *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::MovableObject *> > > > __thiscall Ogre::SceneNode::getAttachedObjectIterator(void)const " (__imp_?getAttachedObjectIterator@SceneNode@Ogre@@UBE?AV?$ConstMapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@@std@@@2@@stdext@@@2@XZ)
..\bin\Release/Plugin_PagingLandScapeSceneManager2.dll : fatal error LNK1120: 4 unresolved externals

Build log was saved at "file://c:\Project\Ogre\ogrenew\PlugIns\PagingLandScape2\obj\Release\BuildLog.htm"
Plugin_PagingLandScapeSceneManager2 - 5 error(s), 0 warning(s)
------ Build started: Project: Plugin_PagingLandScapeSceneManager2, Configuration: Debug Win32 ------
Linking...
Creating library ..\bin\Debug/Plugin_PagingLandScapeSceneManager2.lib and object ..\bin\Debug/Plugin_PagingLandScapeSceneManager2.exp
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "public: virtual class Ogre::MapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::MovableObject *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::MovableObject *> > > > __thiscall Ogre::SceneNode::getAttachedObjectIterator(void)" (?getAttachedObjectIterator@SceneNode@Ogre@@UAE?AV?$MapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "public: virtual class Ogre::ConstMapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::MovableObject *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::MovableObject *> > > > __thiscall Ogre::SceneNode::getAttachedObjectIterator(void)const " (?getAttachedObjectIterator@SceneNode@Ogre@@UBE?AV?$ConstMapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVMovableObject@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "public: virtual class Ogre::MapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::Node *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::Node *> > > > __thiscall Ogre::Node::getChildIterator(void)" (?getChildIterator@Node@Ogre@@UAE?AV?$MapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@@std@@@2@@stdext@@@2@XZ)
OgrePagingLandScapeOctreeNode.obj : error LNK2001: unresolved external symbol "public: virtual class Ogre::ConstMapIterator<class stdext::hash_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Ogre::Node *,class stdext::hash_compare<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Ogre::Node *> > > > __thiscall Ogre::Node::getChildIterator(void)const " (?getChildIterator@Node@Ogre@@UBE?AV?$ConstMapIterator@V?$hash_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@V?$hash_compare@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@stdext@@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVNode@Ogre@@@std@@@2@@stdext@@@2@XZ)
..\bin\Debug/Plugin_PagingLandScapeSceneManager2.dll : fatal error LNK1120: 4 unresolved externals

Build log was saved at "file://c:\Project\Ogre\ogrenew\PlugIns\PagingLandScape2\obj\Debug\BuildLog.htm"
Plugin_PagingLandScapeSceneManager2 - 5 error(s), 0 warning(s)
------ Build started: Project: Demo_PagingLandScape2, Configuration: Release Win32 ------
Demo_PagingLandScape2 - up-to-date.
------ Build started: Project: Demo_PagingLandScape2, Configuration: Debug Win32 ------
Linking...
MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function _WinMainCRTStartup
..\bin\Debug/Demo_PagingLandScape2.exe : fatal error LNK1120: 1 unresolved externals

Build log was saved at "file://c:\Project\Ogre\ogrenew\Samples\PagingLandScape2\obj\Debug\BuildLog.htm"
Demo_PagingLandScape2 - 2 error(s), 0 warning(s)


I am linking to OgreMain_d.lib/OgreMain.lib.

Ogre builds fine. I even made an edit to OgreIteratorWrappers.h and rebuilt to be sure this was getting into the lib, but it still refuses to link.

I'm stumped. Any help?

Also, as you can see, I also get the _WinMain@16 error reported here: http://www.ogre3d.org/phpBB2addons/viewtopic.php?t=573

EDIT:

tuan, in that other thread you say "plsm2 SDK is ogre SDK compatible and Azathoth CVS compatible."

Now, "ogre SDK" implies, well, the Ogre SDK from http://www.ogre3d.org/index.php?option= ... tcat&cat=1 which doesn't have an OgreMain folder, so PLSM2 "out of the box" won't build with the Ogre SDK, without major changes to the include/link paths.

Still, I would guess by "Ogre SDK" you mean 1.0.7 stable (not CVS), but because of this MapIterator problem, it doesn't seem compatible with that either.

Does this mean PLSM2 is, at the moment, only compatible with Azathoth CVS???

Also, the solution file includes the MapEditor project, which is not included in the archive.

tuan kuranes

04-03-2006 09:17:50

I'll try to reproduce the problem here as I don't have any clue...

PSLM2 SDK is Ogre SDK compatible all version, has since 1.0.X has no interfrace branch.

But it's compatible at source level, which means you have to compile/build/rebuild all PLSM2 source against the SDK. You cannot use a previous plsm2 build result against another SDK, or CVS.

tuan kuranes

04-03-2006 09:41:07

cannot reproduce the bug.
Compile by hand OgrePagingLandScapeOctreeNode.cpp and Try a "rebuild all" as there is strange linking problem.