You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by Manuel Teira Paz <mt...@tid.es> on 2008/09/24 13:03:23 UTC

Solaris linker and implicit dependencies

Hi, back to work after holidays and some other issues regarding me to 
contribute to the project.

Time to 'svn update', resolve some conflicts and compile again the whole 
stuff. In this process, I've revisited some old issue with the solaris 
linker and its handling of implicit dependencies (i.e. libraries linked 
by other libraries).

I already suffered this problem during the link stage of qpidd, where I 
needed to add a -lboost_system linker flag, to fix unresolved symbol errors.

So, I guess the solaris linker doesn't like to follow linked library 
dependencies whereas the linux one does. Otherwise, I suppose that the 
linux qpidd wouldn't link, and I suppose that's not the case.

Even worse, the new organization of acl and cluster as plugins (I guess) 
threw more similar problems. Since libtool is passed the -no-undefined 
and -module options, the solaris linker is instructed to not allow 
undefined symbols, and since only the libraries specified in the link 
command are taken into account, lots of errors arised. I'm adding the 
linkage errors below.

I'm not even sure if this analysis is right. Comments are welcome. And 
even if it's right, don't know how to proceed. Adding inconditionally 
all the involved libraries in all the LDFLAGS lines? Unfortunately, 
there will be differences between linux and solaris, since in solaris we 
should even explicitly link against the C++ runtime (-lCrun).

Ideas are welcome. :)

Best regards.
Manuel.

PS: The promised log


/bin/bash ../libtool --tag=CXX    --mode=link CC -g -m64  
-I/opt/dslap/contrib/include -library=stlport4 -mt  -no-undefined 
-module -avoid-version -L/opt/dslap/contrib/lib -library=stlport4 -mt 
-L/usr/lib/openais -L/usr/lib64/openais -o acl.la -rpath 
/opt/dslap/contrib/lib/qpid/daemon qpid/acl/Acl.lo qpid/acl/AclData.lo  
qpid/acl/AclPlugin.lo qpid/acl/AclReader.lo libqpidbroker.la
rm -fr  .libs/acl.so
CC -g -m64 -G -zdefs -hacl.so -o .libs/acl.so   qpid/acl/.libs/Acl.o 
qpid/acl/.libs/AclData.o qpid/acl/.libs/AclPlugin.o 
qpid/acl/.libs/AclReader.o  
-R/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs 
-R/opt/dslap/contrib/lib 
-L/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs 
-L/opt/dslap/contrib/lib -library=stlport4 -L/usr/lib/openais 
-L/usr/lib64/openais ./.libs/libqpidbroker.so -lc   -m64 -mt -mt
Undefined                       first referenced
 symbol                             in file
void __Crun::pure_error()         qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
const std::type_info&__Crun::make_typeid(const 
__Crun::static_type_info*) qpid/acl/.libs/AclPlugin.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
void*__Crun::simple_down_cast(void*,const 
__Crun::static_type_info*,const __Crun::static_type_info*) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
void qpid::Plugin::Target::addFinalizer(const 
boost::function<void(),std::allocator<void> >&) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::Options::Options #Nvariant 1(const std::string &) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::__RTTI__1nEqpidJException_ qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
[Hint: static member qpid::__RTTI__1nEqpidJException_ must be defined in 
the program]

void*__Crun::ex_alloc(unsigned long)         qpid/acl/.libs/Acl.o  
(symbol belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
void __Crun::ex_throw(void*,const 
__Crun::static_type_info*,void(*)(void*)) qpid/acl/.libs/Acl.o  (symbol 
belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
qpid::Plugin::Plugin #Nvariant 1()           qpid/acl/.libs/AclPlugin.o  
(symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::Plugin::~Plugin #Nvariant 1()           
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
std::__RTTI__1nDstdJexception_ qpid/acl/.libs/AclReader.o  (symbol 
belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
[Hint: static member std::__RTTI__1nDstdJexception_ must be defined in 
the program]

boost::program_options::options_description_easy_init&boost::program_options::options_description_easy_init::operator()(const 
char*,const boost::program_options::value_semantic*,const char*) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
qpid::sys::AbsTime qpid::sys::AbsTime::now()      qpid/acl/.libs/Acl.o  
(symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::framing::FieldTable::~FieldTable() qpid/acl/.libs/Acl.o  (symbol 
belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
boost::program_options::arg     qpid/acl/.libs/AclPlugin.o  (symbol 
belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
[Hint: static member boost::program_options::arg must be defined in the 
program]

qpid::framing::SequenceNumber::SequenceNumber() qpid/acl/.libs/Acl.o  
(symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::Exception::Exception(const std::string &) qpid/acl/.libs/Acl.o  
(symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::__RTTI__1nEqpidGPluginGTarget_ qpid/acl/.libs/AclPlugin.o  (symbol 
belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
[Hint: static member qpid::__RTTI__1nEqpidGPluginGTarget_ must be 
defined in the program]

int qpid::management::ManagementObject::getThreadIndex() 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
qpid::Exception::~Exception()          qpid/acl/.libs/Acl.o  (symbol 
belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
void boost::program_options::validate(boost::any&,const 
std::vector<std::string>&,std::string *,int) qpid/acl/.libs/AclPlugin.o  
(symbol belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
qpid::SessionState::Configuration::Configuration(unsigned long,unsigned 
long) qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
boost::program_options::typed_value<bool,char>*boost::program_options::bool_switch(bool*) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
std::string qpid::prettyArg(const std::string &,const std::string &) 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
void*__Crun::ex_get()            qpid/acl/.libs/AclReader.o  (symbol 
belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
void*operator new(unsigned long,void*)                      
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
qpid::framing::SequenceNumber::SequenceNumber(unsigned) 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
std::exception::__vtbl          qpid/acl/.libs/AclPlugin.o  (symbol 
belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
[Hint: try checking whether the first non-inlined, non-pure virtual 
function of class std::exception is defined]

boost::program_options::options_description_easy_init 
boost::program_options::options_description::add_options() 
qpid/acl/.libs/AclPlugin.o  (symbol belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
void __Crun::ex_rethrow_q()       qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
qpid::SessionId::SessionId(const std::string &,const std::string &) 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
void qpid::log::Statement::log(const std::string &) 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
boost::program_options::options_description::m_default_line_length 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
[Hint: static member 
boost::program_options::options_description::m_default_line_length must 
be defined in the program]

void 
boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&,const 
std::vector<std::string>&,bool)const qpid/acl/.libs/AclPlugin.o  (symbol 
belongs to implicit dependency 
/opt/dslap/contrib/lib/libboost_program_options.so)
void __Crun::register_exit_code(void(*)()extern"C") 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
bool __Crun::ex_skip()            qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
qpid::management::Manageable::__vtbl qpid/acl/.libs/Acl.o  (symbol 
belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
[Hint: try checking whether the first non-inlined, non-pure virtual 
function of class qpid::management::Manageable is defined]

void __Crun::ex_clean()           qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
qpid::log::Statement::Initializer::Initializer(qpid::log::Statement&) 
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/export/home/devel/ws/DSLAP/qpid/trunk/qpid/cpp/src/.libs/libqpidcommon.so.0)
void __Crun::ex_rethrow()         qpid/acl/.libs/Acl.o  (symbol belongs 
to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
void operator delete(void*,void*)                      
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
std::bad_cast::__vtbl           qpid/acl/.libs/AclPlugin.o  (symbol 
belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
[Hint: try checking whether the first non-inlined, non-pure virtual 
function of class std::bad_cast is defined]

void*operator new[](unsigned long)                       
qpid/acl/.libs/AclReader.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
void*operator new(unsigned long)                       
qpid/acl/.libs/Acl.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
void operator delete[](void*)                       
qpid/acl/.libs/AclData.o  (symbol belongs to implicit dependency 
/usr/lib/sparcv9/libCrun.so.1)
void operator delete(void*)                       qpid/acl/.libs/Acl.o  
(symbol belongs to implicit dependency /usr/lib/sparcv9/libCrun.so.1)
ld: fatal: Symbol referencing errors. No output written to .libs/acl.so
*** Error code 1
make: Fatal error: Command failed for target `acl.la'