Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 401431 - libcrypto++.so NEEDED library list incomplete
Summary: libcrypto++.so NEEDED library list incomplete
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Library (show other bugs)
Hardware: AMD64 Linux
: Normal normal (vote)
Assignee: Crypto team [DISABLED]
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-30 03:17 UTC by Mark Wright
Modified: 2012-01-30 16:07 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
patch that 1) uses libtool tag=CXX 2) adds -lpthread (crypto++-5.6.1-fix_build_system_cxx_pthread.patch,1.13 KB, patch)
2012-01-30 03:21 UTC, Mark Wright
Details | Diff
crypto++-5.6.1-fix_build_system.patch (crypto++-5.6.1-fix_build_system.patch,5.55 KB, patch)
2012-01-30 03:49 UTC, Arfrever Frehtes Taifersar Arahesis
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Wright gentoo-dev 2012-01-30 03:17:10 UTC
libcrypto++.so is linked such that the NEEDED library list is incomplete.

Reproducible: Always

Steps to Reproduce:
1. ldd -r /usr/lib64/libcrypto++.so
2. Observe it has missing symbols, these are due to the NEEDED library list being incomplete.
Actual Results:  
# ldd -r /usr/lib64/libcrypto++.so >x 2>&1      
# cat x | c++filt
	linux-vdso.so.1 =>  (0x00007fff1a565000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fae0f1f1000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fae0efd4000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fae0ec48000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fae0fbbc000)
undefined symbol: __cxa_pure_virtual	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for __cxxabiv1::__si_class_type_info	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for __cxxabiv1::__vmi_class_type_info	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for __cxxabiv1::__class_type_info	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for std::exception	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for __cxxabiv1::__pointer_type_info	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for __cxxabiv1::__enum_type_info	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for std::basic_ostream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for std::basic_istream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for unsigned char const*	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for std::bad_alloc	(/usr/lib64/libcrypto++.so)
undefined symbol: VTT for std::basic_ofstream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::basic_ios<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for char const*	(/usr/lib64/libcrypto++.so)
undefined symbol: VTT for std::basic_ifstream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::bad_alloc	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for unsigned int	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for bool	(/usr/lib64/libcrypto++.so)
undefined symbol: std::ios_base::Init::~Init()	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for int	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for wchar_t const*	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::basic_filebuf<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::basic_streambuf<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::basic_ofstream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for unsigned char*	(/usr/lib64/libcrypto++.so)
undefined symbol: vtable for std::basic_ifstream<char, std::char_traits<char> >	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for int const*	(/usr/lib64/libcrypto++.so)
undefined symbol: typeinfo for unsigned char	(/usr/lib64/libcrypto++.so)
undefined symbol: std::bad_alloc::~bad_alloc()	(/usr/lib64/libcrypto++.so)
undefined symbol: __gxx_personality_v0	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >& std::ws<char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&)	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_free_exception	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_begin_catch	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned long, std::allocator<char> const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)	(/usr/lib64/libcrypto++.so)
undefined symbol: operator new(unsigned long)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::seekg(std::fpos<__mbstate_t>)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_leak_hard()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*, unsigned long)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::__throw_length_error(char const*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::ios_base::ios_base()	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_guard_release	(/usr/lib64/libcrypto++.so)
undefined symbol: operator delete(void*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::__basic_file<char>::~__basic_file()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(unsigned long, char)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::uncaught_exception()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::read(char*, long)	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_allocate_exception	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_List_node_base::_M_hook(std::_List_node_base*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::tellg()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::replace(unsigned long, unsigned long, char const*, unsigned long)	(/usr/lib64/libcrypto++.so)
undefined symbol: log	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const	(/usr/lib64/libcrypto++.so)
undefined symbol: std::set_new_handler(void (*)())	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_throw	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_guard_abort	(/usr/lib64/libcrypto++.so)
undefined symbol: std::__throw_bad_alloc()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::seekg(long, std::_Ios_Seekdir)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ostream<char, std::char_traits<char> >::flush()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_end_catch	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_guard_acquire	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::putback(char)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::locale::~locale()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::ios_base::Init::Init()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::ios_base::~ios_base()	(/usr/lib64/libcrypto++.so)
undefined symbol: __dynamic_cast	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ostream<char, std::char_traits<char> >::write(char const*, long)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_Rb_tree_increment(std::_Rb_tree_node_base*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(unsigned long, char, std::allocator<char> const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::exception::~exception()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_Rb_tree_decrement(std::_Rb_tree_node_base*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: pow	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_filebuf<char, std::char_traits<char> >::close()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf()	(/usr/lib64/libcrypto++.so)
undefined symbol: __cxa_rethrow	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::_List_node_base::_M_unhook()	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*, unsigned long)	(/usr/lib64/libcrypto++.so)
undefined symbol: std::basic_istream<char, std::char_traits<char> >::peek()	(/usr/lib64/libcrypto++.so)
#

Expected Results:  
# ldd -r /usr/lib64/libcrypto++.so
	linux-vdso.so.1 =>  (0x00007fffad984000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffaac356000)
	libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/libstdc++.so.6 (0x00007ffaac04b000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ffaabdc9000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ffaaba3e000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffaab828000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ffaaccee000)
#

I have a fix, is it ok if I add dev-libs/crypto++/crypto++-5.6.1-r3.ebuild that applies an additional patch?
Comment 1 Mark Wright gentoo-dev 2012-01-30 03:21:08 UTC
Created attachment 300331 [details, diff]
patch that 1) uses libtool tag=CXX 2) adds -lpthread

I'm happy to fix the bug myself, you can assign it to me if you like.
Comment 2 Arfrever Frehtes Taifersar Arahesis 2012-01-30 03:49:59 UTC
Created attachment 300333 [details, diff]
crypto++-5.6.1-fix_build_system.patch

All fixes in GNUmakefile should be integrated in crypto++-5.6.1-fix_build_system.patch. Then crypto++-5.6.1-sunos.patch should be deleted. I'm attaching updated version of crypto++-5.6.1-fix_build_system.patch.
Comment 3 Mark Wright gentoo-dev 2012-01-30 05:30:25 UTC
Looks great, thanks!
Comment 4 Dane Smith (RETIRED) gentoo-dev 2012-01-30 16:07:01 UTC
Fixed in CVS. Thanks everyone!


*crypto++-5.6.1-r3 (30 Jan 2012)

  30 Jan 2012; Dane Smith <c1pher@gentoo.org> -crypto++-5.6.1-r2.ebuild,
  +crypto++-5.6.1-r3.ebuild, +files/crypto++-5.6.1-r3-fix_build_system.patch:
  Address NEEDED library issues wrt bug 401431. Thanks Arfrever for the patch.
  Add new patch (updated fix_build_system patch) for r3 since the current one
  is
  used by the stable -r1. The new patch includes the changes that are in the
  patch {P}-sunos. This should be dropped when -r3 goes stable and -r1 is
  dropped.
  Drop -r2.