BioPP / bppsuite

Bio++ Program Suite
16 stars 13 forks source link

undefined symbol #16

Closed Xiaojun928 closed 1 year ago

Xiaojun928 commented 1 year ago

Hi,

I have installed the bppsuite and its dependencies (bpp-core, bpp-seq, bpp-phyl, bpp-popgen) in a non standard path at CenOS. All of these libraries were downloaded by hand instead of using git clone, as this sever cannot access github. No error was reported during the make and installation.

However, when I run bppml for test, I got the error below:

$ ./bppml
./bppml: symbol lookup error: /lib64/libbpp-phyl3.so.1: undefined symbol: _ZN3bpp22AbstractParametrizable12setNamespaceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

I guess that the CMake Warning is related to this issue. Could you please help me with this problem? Thanks in adavance.

cd bppsuite-master
cmake -DCMAKE_INSTALL_PREFIX=/share/software/BioPP/
CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
  become a fatal error in future CMake releases.

-- Found /usr/bin/gzip compression program, using file extension .gz
-- bpp-core3 1.0.0 found:
--   static lib: not built/installed
--   shared lib: /share/software/BioPP/lib64/libbpp-core3.so.1.0.0
--   includes: /share/software/BioPP/include
-- bpp-seq3 1.0.0 found:
--   static lib: not built/installed
--   shared lib: /share/software/BioPP/lib64/libbpp-seq3.so.1.0.0
--   includes: /share/software/BioPP/include
-- bpp-phyl3 1.0.0 found:
--   static lib: not built/installed
--   shared lib: /share/software/BioPP/lib64/libbpp-phyl3.so.1.0.0
--   includes: /share/software/BioPP/include
-- bpp-popgen3 1.0.0 found:
--   static lib: not built/installed
--   shared lib: /share/software/BioPP/lib64/libbpp-popgen3.so.1.0.0
--   includes: /share/software/BioPP/include
-- Found /usr/bin/makeinfo: 'info' and 'html' target enabled (builds info/html doc)
-- Configuring done
-- Generating done
-- Build files have been written to: /share/software/BioPP/bppsuite-master

Kind regards, Xiaojun

lgueguen commented 1 year ago

Hi Xiaojun

apparently your linkage is fine, but to check can you do:

ldd path_to_bppml

If bppml is effectively linked to /share/software/BioPP/lib64/libbpp-core3.so.1.0.0, then can you type:

nm -C /share/software/BioPP/lib64/libbpp-core3.so.1.0.0 | grep setNamespace

to check whether the missing function is really missing or not?

Cheers, Laurent

Xiaojun928 commented 1 year ago

Hi Laurent,

Many thanks for your quick reply! ldd bppml shows that bppml seems not to be linked to /share/software/BioPP/lib64/libbpp-core3.so.1.0.0, though it was linked to /share/software/BioPP/lib64/libbpp-core3.so.1.

$ ldd bppml
    linux-vdso.so.1 =>  (0x00007ffce43f9000)
    libbpp-phyl3.so.1 => /lib64/libbpp-phyl3.so.1 (0x00007f20021a6000)
    libbpp-seq3.so.1 => /lib64/libbpp-seq3.so.1 (0x00007f2001d1e000)
    libbpp-core3.so.1 => /lib64/libbpp-core3.so.1 (0x00007f20018a5000)
    libstdc++.so.6 => /share/home-user/xjwang/miniconda3/lib/libstdc++.so.6 (0x00007f20036a9000)
    libgcc_s.so.1 => /share/home-user/xjwang/miniconda3/lib/libgcc_s.so.1 (0x00007f2003694000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f20014d7000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f20011d5000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f2003632000)

The AbstractParametrizable is not missing according to the nm results, as it was listed in the fifth row.

$ nm -C /share/software/BioPP/lib64/libbpp-core3.so.1.0.0 | grep setNamespace
0000000000164e80 W bpp::FunctionWrapper::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001a4ee0 T bpp::LogsumHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000161550 W bpp::ParametrizableAdapter::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001b3a30 T bpp::RescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000013e930 T bpp::AbstractParametrizable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000133720 T bpp::AbstractParameterAliasable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

Do I understand it correctly?

Best, Xiaojun

lgueguen commented 1 year ago

I am not sure than that /share/software/BioPP/lib64/libbpp-core3.so.1.0.0 is the same as /share/software/BioPP/lib64/libbpp-core3.so.1 .

And if you do:

nm -C /share/software/BioPP/lib64/libbpp-core3.so.1 | grep setNamespace

Laurent

Xiaojun928 commented 1 year ago

I got the same results when running nm -C /share/software/BioPP/lib64/libbpp-core3.so.1 | grep setNamespace. Below is the complete output:

$ nm -C /share/software/BioPP/lib64/libbpp-core3.so.1 | grep setNamespace
0000000000164e80 W bpp::FunctionWrapper::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001a4ee0 T bpp::LogsumHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000161550 W bpp::ParametrizableAdapter::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001b3a30 T bpp::RescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000013e930 T bpp::AbstractParametrizable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000133720 T bpp::AbstractParameterAliasable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001af2c0 T bpp::LowMemoryRescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001d9b30 T bpp::MixtureOfDiscreteDistributions::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001d75e0 T bpp::InvariantMixedDiscreteDistribution::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001af340 T non-virtual thunk to bpp::LowMemoryRescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000164ea0 W virtual thunk to bpp::FunctionWrapper::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001a4f40 T virtual thunk to bpp::LogsumHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000161560 W virtual thunk to bpp::ParametrizableAdapter::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001b3a90 T virtual thunk to bpp::RescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000013ecc0 T virtual thunk to bpp::AbstractParametrizable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000133aa0 T virtual thunk to bpp::AbstractParameterAliasable::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001af330 T virtual thunk to bpp::LowMemoryRescaledHmmLikelihood::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001d9c10 T virtual thunk to bpp::MixtureOfDiscreteDistributions::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001d7670 T virtual thunk to bpp::InvariantMixedDiscreteDistribution::setNamespace(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

Best, Xiaojun

lgueguen commented 1 year ago

So, to be really sure on this point, in share/software/BioPP/lib64 , libbpp-core3.so.1.0.0 is linked libbpp-core3.so.1 ?

L

Xiaojun928 commented 1 year ago

Yes, it's linked.

$ ll libbpp-core3.so*
lrwxrwxrwx 1 root root  17 Jan  3 15:40 libbpp-core3.so -> libbpp-core3.so.1
lrwxrwxrwx 1 root root  21 Jan  3 15:40 libbpp-core3.so.1 -> libbpp-core3.so.1.0.0
-rwxr-xr-x 1 root root 30M Jan  3 15:38 libbpp-core3.so.1.0.0
lgueguen commented 1 year ago

Ok, so the problem is not there.

The warning from CMake is caused by missing "." in the command. It should be:

cmake -DCMAKE_INSTALL_PREFIX=/share/software/BioPP/ .

(with the dot at the end).

I let you try with the correct command (perhaps you did similar with other bpp libraries), I hope it will make it.

Cheers, Laurent

Xiaojun928 commented 1 year ago

Hi Laurent,

Thanks for your help! It works now with the dot at the end when running cmake.

Best, Xiaojun

lgueguen commented 1 year ago

This is fine, have fun now. Laurent