Linking problem with lld

Tijl Coosemans tijl at FreeBSD.org
Sun Mar 3 12:35:48 UTC 2019


On Sun, 3 Mar 2019 12:50:03 +0100 Willem Jan Withagen <wjw at digiware.nl>
wrote:
> On 2-3-2019 18:35, Tijl Coosemans wrote:
> > On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen <wjw at digiware.nl>
> > wrote:  
> >> On 2-3-2019 16:21, Tijl Coosemans wrote:  
> >>> On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen <wjw at digiware.nl>
> >>> wrote:  
> >>>> Now if I look in librados.so for rados_create that gives:
> >>>> ====  
> >>>>    > objdump -t librados.so.2.0.0 | grep rados_create  
> >>> You want to look at dynamic symbols so "objdump -T".  
> >> Right, that list is empty.
> >>
> >> So I'm wondering what I can do to get them in that list.  
> > Try the command that creates librados.so.2.0.0 without the
> > --version-script argument.  
> 
> Right, When I see the output, I know I tried that before. But then the 
> versioning goes
> wrong, I think...
> Might need to rewrite the map-file?
> 
> --WjW
> 
> [ 43%] Linking CXX shared library ../../lib/librados.so
> cd /home/jenkins/workspace/ceph-master/build/src/librados && 
> /usr/local/bin/cmake -E cmake_link_script 
> CMakeFiles/librados.dir/link.txt --verbose=1
> ccache /usr/bin/c++ -fPIC  -Wall -Wtype-limits -Wignored-qualifiers 
> -Winit-self -Wpointer-arith -Werror=format-security -fno-strict-aliasing 
> -fsigned-char -Wno-unknown-pragmas -Wno-unused-function 
> -Wno-unused-local-typedef -Wno-varargs -Wno-gnu-designator 
> -Wno-missing-braces -Wno-parentheses -Wno-deprecated-register 
> -ftemplate-depth-1024 -Wnon-virtual-dtor -Wno-unknown-pragmas 
> -Wno-ignored-qualifiers -Wno-inconsistent-missing-override 
> -Wno-mismatched-tags -Wno-unused-private-field 
> -Wno-address-of-packed-member -DCEPH_DEBUG_MUTEX 
> -fdiagnostics-color=auto -fno-builtin-malloc -fno-builtin-calloc 
> -fno-builtin-realloc -fno-builtin-free  -O0 -g -fvisibility=default  
> -Wl,--exclude-libs,ALL -shared -Wl,-soname,librados.so.2 -o 
> ../../lib/librados.so.2.0.0 CMakeFiles/librados.dir/librados_c.cc.o 
> CMakeFiles/librados.dir/librados_cxx.cc.o 
> ../common/CMakeFiles/common_buffer_obj.dir/buffer.cc.o -L/usr/local/lib 
> -Wl,-rpath,/usr/local/lib:/home/jenkins/workspace/ceph-master/build/lib:/usr/local/lib/nss: 
> ../../lib/liblibrados_impl.a ../../lib/libosdc.a 
> ../../lib/libceph-common.so.0 ../../lib/libcls_lock_client.a 
> /usr/local/lib/nss/libssl3.so /usr/local/lib/nss/libsmime3.so 
> /usr/local/lib/nss/libnss3.so /usr/local/lib/nss/libnssutil3.so 
> /usr/local/lib/libplds4.so /usr/local/lib/libplc4.so 
> /usr/local/lib/libnspr4.so /usr/local/lib/libcrypto.so -lrt 
> ../../lib/libjson_spirit.a ../../lib/libcommon_utf8.a 
> ../../lib/liberasure_code.a ../../lib/libcrc32.a ../../lib/libarch.a 
> /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_chrono.so 
> /usr/local/lib/libboost_atomic.so /usr/local/lib/libboost_random.so 
> /usr/local/lib/libboost_system.so 
> /usr/local/lib/libboost_program_options.so 
> /usr/local/lib/libboost_date_time.so 
> /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_regex.so 
> /usr/lib/libexecinfo.so /usr/local/lib/nss/libssl3.so 
> /usr/local/lib/nss/libsmime3.so /usr/local/lib/nss/libnss3.so 
> /usr/local/lib/nss/libnssutil3.so /usr/local/lib/libplds4.so 
> /usr/local/lib/libplc4.so /usr/local/lib/libnspr4.so -lpthread
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_append@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_cancel@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_cmpext@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_create_completion@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_exec@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_flush@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_flush_async@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_get_return_value@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_get_version@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_getxattr@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_getxattrs@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_ioctx_selfmanaged_snap_create@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_ioctx_selfmanaged_snap_remove@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_is_complete@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_is_complete_and_cb@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_is_safe@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_is_safe_and_cb@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_notify@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_read@@ has undefined version
> ld: error: CMakeFiles/librados.dir/librados_c.cc.o: symbol 
> rados_aio_read_op_operate@@ has undefined version
> ld: error: too many errors emitted, stopping now (use -error-limit=0 to 
> see all errors)
> c++: error: linker command failed with exit code 1 (use -v to see 
> invocation)

You could start with a simple version map:

LIBRADOS_14.2.0 {
         global: *;
};

If symbols are visible in objdump -T output with this, you can then
expand the map bit by bit and see at what point it goes wrong.

My guess is the "local: *" in the beginning is matching everything so
nothing remains visible.

See also https://bugs.llvm.org/show_bug.cgi?id=40176


More information about the freebsd-toolchain mailing list