Thanks Brad,
I run nm on those .so file, it prints 'no symbol'

Then with ldd librados.so, I don't see the libceph-common.so, instead:

>         jialin@cori12: ldd librados.so
> linux-vdso.so.1 (0x00002aaaaaacf000)
> libboost_thread-mt.so.1.53.0
> =>/rados_install/lib/libboost_thread-mt.so.1.53.0 (0x00002aaaad24d000)
> libboost_system-mt.so.1.53.0 =>
> /rados_install/lib/libboost_system-mt.so.1.53.0 (0x00002aaaad464000)
> libssl3.so => /usr/lib64/libssl3.so (0x00002aaaad668000)
> libsmime3.so => /usr/lib64/libsmime3.so (0x00002aaaad8b4000)
> libnss3.so => /usr/lib64/libnss3.so (0x00002aaaadadb000)
> libnssutil3.so => /usr/lib64/libnssutil3.so (0x00002aaaaddfe000)
> libplds4.so => /usr/lib64/libplds4.so (0x00002aaaae02c000)
> libplc4.so => /usr/lib64/libplc4.so (0x00002aaaae230000)
> libnspr4.so => /usr/lib64/libnspr4.so (0x00002aaaae435000)
> libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaae673000)
> libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaae890000)
> libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00002aaaaea94000)
> librt.so.1 => /lib64/librt.so.1 (0x00002aaaaec99000)
> libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002aaaaeea1000)
> libm.so.6 => /lib64/libm.so.6 (0x00002aaaaf22a000)
> libc.so.6 => /lib64/libc.so.6 (0x00002aaaaf527000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002aaaaf8c8000)
> libz.so.1 => /lib64/libz.so.1 (0x00002aaaafadf000)
> /lib64/ld-linux-x86-64.so.2 (0x00002aaaaaaab000)


I also found this thread: http://tracker.ceph.com/issues/14788
which looks similar to the error I run into, and that thread mentioned the
version between the headers file and the .so file, I think in my case both
of them are v10.2.10, which should ok.

Best,
Jialin,

On Tue, May 29, 2018 at 6:17 PM, Brad Hubbard <bhubb...@redhat.com> wrote:

> On Wed, May 30, 2018 at 10:42 AM, Jialin Liu <jaln...@lbl.gov> wrote:
> > Hi,
> > I'm trying to use the libradosstriper api, but having some trouble in
> > linking to lradosstriper. I copied only the `required' libraries from an
> > pre-installed ceph (10.2.10), and put them under my local directory
> > /rados_install/lib and rados_install/include, on a linux machine.
> >
> > /rados_install/lib:
> >>
> >> libboost_date_time.so.1.53.0      libboost_system.so.1.53.0
> >> libboost_filesystem-mt.so.1.53.0  libboost_thread-mt.so.1.53.0
> >> libboost_filesystem.so.1.53.0     libcephfs.so.1.0.0
> >> libboost_iostreams-mt.so.1.53.0
> >> libboost_iostreams.so.1.53.0
> >> libboost_random-mt.so.1.53.0      librados.so.2.0.0
> >> libboost_regex.so.1.53.0          librados_tp.so.2.0.0
> >> libboost_system-mt.so.1.53.0      libradosstriper.so.1.0.0
> >> libcephfs.so   librados.so  libradosstriper.so
> >
> >
> > /rados_install/include:
> >>
> >> |-- rados
> >> |   |-- buffer.h -> ../buffer.h
> >> |   |-- buffer_fwd.h -> ../buffer_fwd.h
> >> |   |-- crc32c.h -> ../crc32c.h
> >> |   |-- inline_memory.h -> ../inline_memory.h
> >> |   |-- librados.h
> >> |   |-- librados.hpp
> >> |   |-- librgw.h
> >> |   |-- memory.h -> ../memory.h
> >> |   |-- objclass.h
> >> |   |-- page.h -> ../page.h
> >> |   |-- rados_types.h
> >> |   |-- rados_types.hpp
> >> |   `-- rgw_file.h
> >> `-- radosstriper
> >>     |-- libradosstriper.h
> >>     `-- libradosstriper.hpp
> >
> >
> > The test code is simple, as attached, and I compiled it with dynamic
> > linking:
> >>
> >> cc -L/rados_install/lib -I/rados_install/include -o librados_test
> >> librados_test.c -lrados -lradosstriper
> >
> >
> > But got the following message, can anyone plz advise?
> >
> >>
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::ptr::ptr(ceph::buffer::ptr&&)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::ptr::operator=(ceph::buffer::ptr&&)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `librados::IoCtx::remove(std::string const&, int)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::list::iterator::iterator(ceph::buffer::list*, unsigned
> int)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::list::is_provided_buffer(char const*) const'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::list::append(ceph::buffer::ptr&&)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::list::iterator::iterator(ceph::buffer::list*, unsigned
> int,
> >> std::_List_iterator<ceph::buffer::ptr>, unsigned int)'
> >> /rados_install/lib/libradosstriper.so: undefined reference to
> >> `ceph::buffer::list::list(ceph::buffer::list&&)'
>
> Try doing the following in your lib directory.
>
> $ nm -A -C *.so|grep is_provided_buffer
> libceph-common.so:0000000000223df0 T
> ceph::buffer::list::is_provided_buffer(char const*) const
> librados.so:00000000000bfef0 T
> ceph::buffer::list::is_provided_buffer(char const*) const
> libradosstriper.so:                 U
> ceph::buffer::list::is_provided_buffer(char const*) const
>
> 'ldd librados.so' shows it links to libceph-common.so so I suspect you
> may need that library.
>
> Don't forget that you need to tell the linker where to find these
> libraries at runtime so you will need to pass something like
> '-Wl,-rpath=/rados_install/lib' to the compiler so it finds the
> correct versions of the libraries (you can check which ones it will
> find with 'ldd librados_test'.
>
> HTH
>
> >
> >
> > Best,
> > Jialin
> > NERSC
> >
> > _______________________________________________
> > ceph-users mailing list
> > ceph-users@lists.ceph.com
> > http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com
> >
>
>
>
> --
> Cheers,
> Brad
>
_______________________________________________
ceph-users mailing list
ceph-users@lists.ceph.com
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com

Reply via email to