On Mon, 2009-12-07 at 10:28 -0500, Alan Conway wrote:
> On 12/04/2009 12:20 PM, Andrew Stitcher wrote:
> > On Fri, 2009-12-04 at 11:07 -0500, Alan Conway wrote:
> >> ...On 12/02/2009 07:53 PM, Andrew Stitcher wrote:
> >>
> >>> Cmake build is mostly fine - however the clustering module doesn't build
> >>> due to a complication of recent versions of boost.
> >>
> >> The cluster&  cluster test build&  pass for me on f11 with
> >> boost-1.37.0-7.fc11.x86_64, which is the yum latest. Is there a machine I 
> >> can
> >> log into where you see the problem?
> >
> > In response - I don't understand how you can be building this! The
> > StoreStatus.o has references to symbols that are only in libboost_system
> > but it's not directly linked. However having said this I also can't
> > understand why the autotools build does work by the same token - it's a
> > bit of a mystery!
> >
> 
> ldd shows that in my build cluster.so is indeed linked with boost_system-mt.
> 
>   [acon...@rolf cmake]$ ldd src/cluster.so | grep boost
>       libboost_filesystem-mt.so.4 => /usr/lib64/libboost_filesystem-mt.so.4 
> (0x00007f1d97f67000)
>       libboost_program_options-mt.so.4 => 
> /usr/lib64/libboost_program_options-mt.so.4 (0x00007f1d978ac000)
>       libboost_system-mt.so.4 => /usr/lib64/libboost_system-mt.so.4 
> (0x00007f1d95f44000)
> 
> Also note that libcommon uses boost::filesystem and  links without problems, 
> although perhaps StoreStatus is using different symbols. What missing symbols 
> are you seeing?

Ok, I haven't explained in enough detail:

libqpidcommon isn't a problem because by default shared objects are
allowed to have unresolved symbols at link time on the Unix systems I
know - if they weren't resolved at the run time load you'd get an error
- generally sigkill to the process.

ldd doesn't tell you what you need to know here as it gives the
transitive linkage - ie in this case libboost_system is loaded because
libboost_filesystem requires it. To get the actual (non transitive)
requires of an object you need to use objdump -p.

When we build plugin modules for qpid we tell the linker to give an
error if it finds unresolved symbols when linking against the non
transitive requirements (--no-undefined to the linker -Wl,--no-undefined
to the compiler). It's possible that libtool adds another option to make
it check the symbols transitively, which would explain why the autotools
build works, but I can't see why your cmake build could be different
from mine.

The symbols that are unresolved in all of the shared objects that use
boost_filesystem due to inline expansions of things from it are:
                 U boost::system::get_system_category()
                 U boost::system::get_generic_category()


Regards

Andrew


> 
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:dev-subscr...@qpid.apache.org
> 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to