This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
gcc says "undefined symbols", nm finds those symbols in the .so
- From: David dot Denis at reuters dot com
- To: gcc-help at gcc dot gnu dot org
- Cc: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 15 Oct 2004 14:27:48 +0200
- Subject: gcc says "undefined symbols", nm finds those symbols in the .so
Dear all,
here follows some strange behaviour using gcc, if someone has any idea to fix :-)
We have some strange link errors while linking some servers. Our code is linked
with Tibco Hawk 4.2 The following lines shows only errors on class AmiStatus but there
are others problems (btw all link errors are related to symbols present in libtibhawkamicpp.so)
Compilers tested were gcc 3.2.2 and 3.4.2
Our source tree is also compilable on SunOS and AIX, using Hawk 4.2 libraries for those platforms.
Linking didn't produce any error ...
Is it a gcc bug ? are the Hawk libraries for linux broken ?
Whole gcc output on demand (12Mb)
meaningful details :
gcc link stage error messages [grep on AmiStatus]
/mylibpath/libHAT03.so: undefined reference to `AmiStatus::AmiStatus(void*)'
/mylibpath/libKMI03.so: undefined reference to `AmiStatus::getText()'
/mylibpath/libKMI03.so: undefined reference to `AmiStatus::operator=(AmiStatus const&)'
/mylibpath/libHAT03.so: undefined reference to `AmiStatus::setStatus(int, char const*, ...)'
/mylibpath/libKMI03.so: undefined reference to `AmiStatus::AmiStatus()'
/mylibpath/libKMI03.so: undefined reference to `AmiStatus::operator!=(void*)'
/mylibpath/libHAT03.so: undefined reference to `AmiStatus::operator==(void*)'
additional gcc output obtained in link stage using -Wl,--trace,--print-map,--cref [grep on AmiStatus]
AmiStatus type_info function /mylibpath/libtibhawkamicpp.so [is a B entry for nm]
AmiStatus virtual table /mylibpath/libtibhawkamicpp.so [is a V entry for nm]
AmiStatus::~AmiStatus(void) /mylibpath/libtibhawkamicpp.so [is a W entry for nm]
AmiStatus::AmiStatus() /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::AmiStatus(void*) /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::getText() /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::operator!=(void*) /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::operator=(AmiStatus const&) /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::operator==(void*) /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::setStatus(int, char const*, ...) /mylibpath/libHAT03.so [is a T entry for nm]
AmiStatus::~AmiStatus() /mylibpath/libKMI03.so [is a T entry for nm]
AmiStatus::~AmiStatus() /mylibpath/libKMI03.so [is a T entry for nm]
typeinfo for AmiStatus /mylibpath/libKMI03.so
typeinfo name for AmiStatus /mylibpath/libKMI03.so
vtable for AmiStatus /mylibpath/libKMI03.so
nm -A on /mylibpath/libtibhawkamicpp.so, as you can see "undefined references" are not so undefined at all (T)
/mylibpath/libtibhawkamicpp.so:00004230 T AmiStatus::AmiStatus(void)
/mylibpath/libtibhawkamicpp.so:000069c0 W AmiStatus::~AmiStatus(void)
/mylibpath/libtibhawkamicpp.so:00004260 T AmiStatus::AmiStatus(ami_ErrorCode)
/mylibpath/libtibhawkamicpp.so:000043c0 T AmiStatus::AmiStatus(int)
/mylibpath/libtibhawkamicpp.so:00004400 T AmiStatus::AmiStatus(int, char const *)
/mylibpath/libtibhawkamicpp.so:00004340 T AmiStatus::AmiStatus(void *)
/mylibpath/libtibhawkamicpp.so:000042a0 T AmiStatus::AmiStatus(AmiStatus const &)
/mylibpath/libtibhawkamicpp.so:000044d0 T AmiStatus::operator=(ami_ErrorCode)
/mylibpath/libtibhawkamicpp.so:00004510 T AmiStatus::operator=(void *)
/mylibpath/libtibhawkamicpp.so:000045a0 T AmiStatus::operator=(AmiStatus const &)
/mylibpath/libtibhawkamicpp.so:00004440 T AmiStatus::duplicateError(void)
/mylibpath/libtibhawkamicpp.so:000047a0 T AmiStatus::operator==(ami_ErrorCode)
/mylibpath/libtibhawkamicpp.so:00004700 T AmiStatus::operator==(void *)
/mylibpath/libtibhawkamicpp.so:00004640 T AmiStatus::operator==(AmiStatus const &)
/mylibpath/libtibhawkamicpp.so:00004890 T AmiStatus::getCode(void)
/mylibpath/libtibhawkamicpp.so:00004960 T AmiStatus::getFile(void)
/mylibpath/libtibhawkamicpp.so:00004990 T AmiStatus::getLine(void)
/mylibpath/libtibhawkamicpp.so:000048c0 T AmiStatus::getText(void)
/mylibpath/libtibhawkamicpp.so:000048f0 T AmiStatus::getThread(void)
/mylibpath/libtibhawkamicpp.so:000047e0 T AmiStatus::operator!=(ami_ErrorCode)
/mylibpath/libtibhawkamicpp.so:00004750 T AmiStatus::operator!=(void *)
/mylibpath/libtibhawkamicpp.so:000046a0 T AmiStatus::operator!=(AmiStatus const &)
/mylibpath/libtibhawkamicpp.so:00004840 T AmiStatus::operator!(void) const
/mylibpath/libtibhawkamicpp.so:00004820 T AmiStatus::ok(void) const
/mylibpath/libtibhawkamicpp.so:00005bd0 T AmiAsyncMethod::sendError(AmiSubscription *, AmiStatus &)
/mylibpath/libtibhawkamicpp.so:00004920 T AmiStatus::setStatus(int, char const *,...)
/mylibpath/libtibhawkamicpp.so:000049c0 T AmiStatus::setStatusV(int, char const *, void *)
/mylibpath/libtibhawkamicpp.so:00004860 T AmiStatus::stamp(char const *, int)
/mylibpath/libtibhawkamicpp.so:00006980 W AmiStatus type_info function
/mylibpath/libtibhawkamicpp.so:00009818 B AmiStatus type_info node
/mylibpath/libtibhawkamicpp.so:00008110 V AmiStatus virtual table
Any ideas ? Thanks in advance
David Denis
tel: +33 (0) 147 627 736
mailto: david.denis@reuters.com
-----------------------------------------------------------------
Visit our Internet site at http://www.reuters.com
Get closer to the financial markets with Reuters Messaging - for more
information and to register, visit http://www.reuters.com/messaging
Any views expressed in this message are those of the individual
sender, except where the sender specifically states them to be
the views of Reuters Ltd.