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'