Re: Link failure on MinGW after Identd changes

From: Serassio Guido <guido.serassio_at_acmeconsulting.it>
Date: Tue, 02 Jun 2009 15:52:49 +0200

Hi Amos,

At 14.32 02/06/2009, Amos Jeffries wrote:

>Do you have "nm" utility under MingW to test the built .libs/libident.a
>to see if its actually exporting the right symbols?

Yes, this is the output of nm --demangle ident/.libs/libident.a on Linux:

AclIdent.o:
00000000 r .LC0
0000000c r .LC1
0000003c r .LC10
0000000e r .LC2
00000011 r .LC3
00000000 r .LC4
00000014 r .LC5
0000001d r .LC6
00000020 r .LC7
00000029 r .LC8
00000054 r .LC9
00000000 V DW.ref.__gxx_personality_v0
          U _GLOBAL_OFFSET_TABLE_
00000140 t global constructors keyed to _ZN8ACLIdentD2Ev
          U _Unwind_Resume
          U SkipBuildPrefix(char const*)
000000b0 t __static_initialization_and_destruction_0(int, int)
00000000 V guard variable for ACLUserData::Pool()::thePool
00000000 V guard variable for ACLRegexData::Pool()::thePool
00000000 V guard variable for HttpHdrRange::Pool()::thePool
00000000 V guard variable for HttpHeaderEntry::Pool()::thePool
00000000 V guard variable for HttpHdrRangeSpec::Pool()::thePool
00000000 V guard variable for acl_proxy_auth_match_cache::Pool()::thePool
00000000 V guard variable for ACLList::Pool()::thePool
00000000 V guard variable for ACLIdent::Pool()::thePool
00000000 V guard variable for ev_entry::Pool()::thePool
00000000 V guard variable for wordlist::Pool()::thePool
00000000 W ACLUserData::Pool()
000004a0 T IdentLookup::LookupDone(char const*, void*)
00000090 T IdentLookup::Instance()
00000000 B IdentLookup::instance_
00000000 W IdentLookup::~IdentLookup()
00000000 W IdentLookup::~IdentLookup()
00000000 W ACLChecklist::AsyncState::~AsyncState()
00000000 W ACLChecklist::AsyncState::~AsyncState()
          U ACLChecklist::changeState(ACLChecklist::AsyncState*)
          U ACLChecklist::markFinished()
          U ACLChecklist::currentAnswer(allow_t)
          U ACLChecklist::asyncInProgress(bool)
          U ACLChecklist::check()
          U ACLChecklist::NullState::Instance()
          U MemAllocatorProxy::free(void*)
          U MemAllocatorProxy::alloc()
          U ACL::matchForCache(ACLChecklist*)
00000000 W ACL::prepareForUse()
          U ACL::ACL()
          U ACL::~ACL()
          U Debug::finishDebug()
          U Debug::getDebugOut()
          U Debug::level
          U Debug::Levels
          U Ident::Start(IpAddress&, IpAddress&, void (*)(char
const*, void*), void*)
00000000 W ACLData<char const*>::prepareForUse()
00000000 W ACLData<char const*>::~ACLData()
00000000 W ACLData<char const*>::~ACLData()
00000000 W ACLIdent::Pool()
00000190 T ACLIdent::match(ACLChecklist*)
000007e0 T ACLIdent::parse()
00000320 T ACLIdent::ACLIdent(ACLData<char const*>*, char const*)
000003c0 T ACLIdent::ACLIdent(ACLIdent const&)
00000370 T ACLIdent::ACLIdent(ACLData<char const*>*, char const*)
00000430 T ACLIdent::ACLIdent(ACLIdent const&)
00000ab0 T ACLIdent::~ACLIdent()
00000780 T ACLIdent::~ACLIdent()
00000a50 T ACLIdent::~ACLIdent()
00000000 T ACLIdent::operator=(ACLIdent const&)
000005d0 T IdentLookup::checkForAsync(ACLChecklist*) const
          U ACLChecklist::asyncState() const
          U ACLFilledChecklist::conn() const
          U ACL::requiresReply() const
          U ACL::requiresRequest() const
          U ACL::valid() const
00000040 T ACLIdent::typeString() const
00000000 W ACLIdent::isProxyAuth() const
00000050 T ACLIdent::dump() const
00000970 T ACLIdent::clone() const
00000070 T ACLIdent::empty() const
          U std::ostream::operator<<(int)
          U std::ios_base::Init::Init()
          U std::ios_base::Init::~Init()
00000004 b std::__ioinit
          U std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <std::char_traits<char> >(std::basic_ostream<char,
std::char_traits<char> >&, char const*)
00000000 V typeinfo for IdentLookup
          U typeinfo for ACLChecklist
          U typeinfo for ACLFilledChecklist
          U typeinfo for ACL
00000000 V typeinfo for ACLData<char const*>
00000000 V typeinfo for ACLIdent
00000000 V typeinfo for ACLChecklist::AsyncState
00000000 V typeinfo name for IdentLookup
00000000 V typeinfo name for ACLData<char const*>
00000000 V typeinfo name for ACLIdent
00000000 V typeinfo name for ACLChecklist::AsyncState
          U vtable for ACLUserData
00000000 V vtable for IdentLookup
00000000 V vtable for ACLData<char const*>
00000000 V vtable for ACLIdent
          U vtable for __cxxabiv1::__class_type_info
          U vtable for __cxxabiv1::__si_class_type_info
00000000 V vtable for ACLChecklist::AsyncState
00000000 V ACLUserData::Pool()::thePool
00000000 V ACLIdent::Pool()::thePool
0000000e r ACLIdent::match(ACLChecklist*)::__FUNCTION__
00000014 r ACLIdent::parse()::__FUNCTION__
00000000 r IdentLookup::checkForAsync(ACLChecklist*) const::__FUNCTION__
          U __cxa_atexit
          U __cxa_call_unexpected
          U __cxa_guard_acquire
          U __cxa_guard_release
          U __cxa_pure_virtual
          U __dso_handle
          U __dynamic_cast
          U __gxx_personality_v0
00000000 T __i686.get_pc_thunk.bx
00000000 T __i686.get_pc_thunk.cx
00000160 t __tcf_0
00000940 t __tcf_1
          U dash_str
          U xassert
          U xfree
          U xstrncpy

Ident.o:
00000000 r .LC0
00000000 r .LC1
00000068 r .LC10
0000006a r .LC11
00000071 r .LC12
00000006 r .LC2
0000000c r .LC3
0000001b r .LC4
0000002d r .LC5
00000030 r .LC6
00000039 r .LC7
0000004b r .LC8
0000005f r .LC9
00000010 b CBDATA_IdentStateData
00000000 V DW.ref.__gxx_personality_v0
          U Squid_MaxFD
          U _GLOBAL_OFFSET_TABLE_
00000060 t global constructors keyed to _ZN5Ident9TheConfigE
          U _Unwind_Resume
          U _comm_close(int, char const*, int)
          U cbdataInternalFree(void*)
          U cbdataInternalLock(void const*)
          U cbdataInternalAlloc(cbdata_type)
          U cbdataReferenceValid(void const*)
          U cbdataInternalAddType(cbdata_type, char const*, int, void
(*)(void*))
          U comm_add_close_handler(int, void (*)(int, void*), void*)
          U cbdataInternalReferenceDoneValid(void**, void**)
00000000 t __static_initialization_and_destruction_0(int, int)
          U comm_read(int, char*, int, void (*)(int, char*, unsigned
int, comm_err_t, int, void*), void*)
00000000 V guard variable for HttpHdrRange::Pool()::thePool
00000000 V guard variable for HttpHeaderEntry::Pool()::thePool
00000000 V guard variable for HttpHdrRangeSpec::Pool()::thePool
00000000 V guard variable for acl_proxy_auth_match_cache::Pool()::thePool
00000000 V guard variable for ACLList::Pool()::thePool
00000000 V guard variable for ev_entry::Pool()::thePool
00000000 V guard variable for wordlist::Pool()::thePool
          U Debug::finishDebug()
          U Debug::getDebugOut()
          U Debug::level
          U Debug::Levels
0000000c b Ident::ident_hash
000007f0 t Ident::ConnectDone(int, comm_err_t, int, void*)
00000540 t Ident::identCallback(Ident::_IdentStateData*, char*)
000000a0 T Ident::Init()
00000780 t Ident::Close(int, void*)
000001c0 T Ident::Start(IpAddress&, IpAddress&, void (*)(char const*,
void*), void*)
00000470 t Ident::Timeout(int, void*)
00000140 t Ident::ClientAdd(Ident::_IdentStateData*, void (*)(char
const*, void*), void*)
000005e0 t Ident::ReadReply(int, char*, unsigned int, comm_err_t, int, void*)
00000000 B Ident::TheConfig
          U MemBuf::init()
          U MemBuf::clean()
          U MemBuf::Printf(char const*, ...)
          U IpAddress::SetPort(unsigned short)
          U IpAddress::IpAddress(IpAddress const&)
          U IpAddress::~IpAddress()
          U IpAddress::operator=(IpAddress const&)
          U IpAddress::NtoA(char*, unsigned int, int) const
          U IpAddress::ToURL(char*, unsigned int) const
          U IpAddress::GetPort() const
          U std::ostream::operator<<(int)
          U std::ios_base::Init::Init()
          U std::ios_base::Init::~Init()
00000008 b std::__ioinit
          U std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <std::char_traits<char> >(std::basic_ostream<char,
std::char_traits<char> >&, char const*)
          U __cxa_atexit
          U __dso_handle
          U __gxx_personality_v0
00000000 T __i686.get_pc_thunk.bx
00000070 t __tcf_0
          U commConnectStart
          U commSetTimeout
          U comm_open_listener
          U comm_write_mbuf
          U hash4
          U hashPrime
          U hash_create
          U hash_join
          U hash_lookup
          U hash_remove_link
          U isspace
          U snprintf
          U strchr
          U strcmp
          U strrchr
          U strstr
          U xassert
          U xcalloc
          U xfree
          U xstrdup

And this on MinGW ....

AclIdent.o:
00000000 b .bss
00000000 d .data
00000000 N .stab
00000000 N .stabstr
00000000 t .text

Ident.o:
00000000 b .bss
00000000 d .ctors
00000000 d .data
00000000 d .data$_ZGVZN12HttpHdrRange4PoolEvE7thePool
00000000 d .data$_ZGVZN15HttpHeaderEntry4PoolEvE7thePool
00000000 d .data$_ZGVZN16HttpHdrRangeSpec4PoolEvE7thePool
00000000 d .data$_ZGVZN26acl_proxy_auth_match_cache4PoolEvE7thePool
00000000 d .data$_ZGVZN7ACLList4PoolEvE7thePool
00000000 d .data$_ZGVZN8ev_entry4PoolEvE7thePool
00000000 d .data$_ZGVZN8wordlist4PoolEvE7thePool
00000000 d .dtors
00000000 r .gcc_except_table
00000000 r .rdata
00000000 N .stab
00000000 N .stabstr
00000000 t .text
00000028 b CBDATA_IdentStateData
          U Squid_MaxFD
00000b00 t global destructors keyed to _ZN5Ident9TheConfigE
00000af0 t global constructors keyed to _ZN5Ident9TheConfigE
          U _Unwind_SjLj_Register
          U _Unwind_SjLj_Resume
          U _Unwind_SjLj_Unregister
          U _comm_close(int, char const*, int)
          U cbdataInternalFree(void*)
          U cbdataInternalLock(void const*)
          U cbdataInternalAlloc(cbdata_type)
          U cbdataReferenceValid(void const*)
          U cbdataInternalAddType(cbdata_type, char const*, int, void
(*)(void*))
          U comm_add_close_handler(int, void (*)(int, void*), void*)
          U cbdataInternalReferenceDoneValid(void**, void**)
00000a80 t __static_initialization_and_destruction_0(int, int)
          U comm_read(int, char*, int, void (*)(int, char*, unsigned
int, comm_err_t, int, void*), void*)
00000000 D guard variable for HttpHdrRange::Pool()::thePool
00000000 D guard variable for HttpHeaderEntry::Pool()::thePool
00000000 D guard variable for HttpHdrRangeSpec::Pool()::thePool
00000000 D guard variable for acl_proxy_auth_match_cache::Pool()::thePool
00000000 D guard variable for ACLList::Pool()::thePool
00000000 D guard variable for ev_entry::Pool()::thePool
00000000 D guard variable for wordlist::Pool()::thePool
          U Debug::finishDebug()
          U Debug::getDebugOut()
          U Debug::level
          U Debug::Levels
00000018 b Ident::ident_hash
000000d0 t Ident::ConnectDone(int, comm_err_t, int, void*)
00000000 t Ident::identCallback(Ident::_IdentStateData*, char*)
00000360 T Ident::Init()
00000070 t Ident::Close(int, void*)
000003e0 T Ident::Start(IpAddress&, IpAddress&, void (*)(char const*,
void*), void*)
00000980 t Ident::Timeout(int, void*)
000002f0 t Ident::ClientAdd(Ident::_IdentStateData*, void (*)(char
const*, void*), void*)
000007a0 t Ident::ReadReply(int, char*, unsigned int, comm_err_t, int, void*)
00000000 B Ident::TheConfig
          U MemBuf::init()
          U MemBuf::clean()
          U MemBuf::Printf(char const*, ...)
          U IpAddress::SetPort(unsigned short)
          U IpAddress::IpAddress(IpAddress const&)
          U IpAddress::~IpAddress()
          U IpAddress::operator=(IpAddress const&)
          U IpAddress::NtoA(char*, unsigned int, int) const
          U IpAddress::ToURL(char*, unsigned int) const
          U IpAddress::GetPort() const
          U std::ostream::operator<<(long)
          U std::ostream::operator<<(unsigned long)
          U std::ios_base::Init::Init()
          U std::ios_base::Init::~Init()
00000008 b std::__ioinit
          U std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <std::char_traits<char> >(std::basic_ostream<char,
std::char_traits<char> >&, char const*)
          U __gxx_personality_sj0
          U _imp____mb_cur_max
          U _imp___pctype
          U _isctype
          U commConnectStart
          U commSetTimeout
          U comm_open_listener
          U comm_write_mbuf
          U hash4
          U hashPrime
          U hash_create
          U hash_join
          U hash_lookup
          U hash_remove_link
          U snprintf
          U strchr
          U strcmp
          U strrchr
          U strstr
          U xassert
          U xcalloc
          U xfree
          U xstrdup

It seems that AclIdent.o is exporting nothing (even running nm
without --demangle) ...

Really cannot understand this ...

Regards

Guido

-
========================================================
Guido Serassio
Acme Consulting S.r.l. - Microsoft Certified Partner
Via Lucia Savarino, 1 10098 - Rivoli (TO) - ITALY
Tel. : +39.011.9530135 Fax. : +39.011.9781115
Email: guido.serassio_at_acmeconsulting.it
WWW: http://www.acmeconsulting.it/
Received on Tue Jun 02 2009 - 13:53:01 MDT

This archive was generated by hypermail 2.2.0 : Tue Jun 02 2009 - 12:00:02 MDT