[Ace-users] [ace-users] ACE_Hash_Map_Manager will not link if static
David Demland
ddemland at marchnetworks.com
Fri Jan 4 17:43:07 CST 2008
Thank You for the help. I forgot to declare the ACE_Hash_Map_Manager. It
was a C++ problem not ACE.
David
-----Original Message-----
From: schmidt at dre.vanderbilt.edu [mailto:schmidt at dre.vanderbilt.edu]
Sent: Friday, January 04, 2008 3:46 PM
To: David Demland
Cc: ace-users at cse.wustl.edu
Subject: Re: [ace-users] ACE_Hash_Map_Manager will not link if static
Hi David,
To ensure that we have proper version/platform/compiler information,
please make sure you fill out the appropriate problem report form (PRF),
which is in
$ACE_ROOT/PROBLEM-REPORT-FORM
$TAO_ROOT/PROBLEM-REPORT-FORM
or in
$ACE_ROOT/BUG-REPORT-FORM
$TAO_ROOT/BUG-REPORT-FORM
in older versions of ACE+TAO. Make sure to include this information
when asking any questions about ACE+TAO since otherwise we have to
"guess" what version/platform/compiler/options you've using, which is
very error-prone and slows down our responsiveness. If you don't use
the PRF, therefore, it is less likely that someone from the core
ACE+TAO developer team will be able to answer your question.
Naturally, we encourage and appreciate other members of the ACE+TAO
user community who can respond to questions that they have the answers
to.
> Here is my problem; I need to have a singleton type object that the
whole system sees only one copy of the object. This
> object will manage a key/value pair of queue IDs and queue objects. To
do this I have an object that has all static
> attributes and methods. This will ensure that all references to the
object will work on the same copy. Since these are key/
> value pairs I want to use some sort of map (or hash table) since the
keys have to be unique. The class looks something
> like:
>
> typedef ACE_Hash_Map_Manager<int, QueueObject *, ACE_Null_Mutex>
EventMap;
>
> class EventDispatcher
>
> {
>
> private:
>
> static EventMap m_queueList;
>
> public:
>
> static bool CreateStaticQueue(int P_queueID);
>
> static bool DestroyQueue(int P_queueID);
>
> };
>
> If I declare the EventMap and the methods without the static keyword
the code links. Once I declare the EventMap and the
> methods static I get an unresolved symbol error in the linker:
>
> error LNK2001: unresolved external symbol "private: static class
ACE_Hash_Map_Manager<int,class QueueObject *,class
> ACE_Null_Mutex> EventDispatcher::m_queueList"
(?m_queueList at EventDispatcher@@0V?
> $ACE_Hash_Map_Manager at HPAVQueueObject@@VACE_Null_Mutex@@@@A)
>
> What do I have to do to get the ACE_Hash_Map_Manager to link as a
static?
I think this is a C++ question, not an ACE question. Please see
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic
=/com.ibm.xlcpp8l.doc/language/ref/cplr038.htm
for how to do this.
Thanks,
Doug
More information about the Ace-users
mailing list