Re: Linking problem with lld
On Sun, 3 Mar 2019 15:21:56 +0100 Willem Jan Withagen wrote: > First success. > I used this map, but also needed to fix a .symver: > > #define LIBRADOS_C_API_BASE_DEFAULT(fn) \ > - asm(".symver _" #fn ", " #fn "@@") > + asm(".symver _" #fn ", " #fn "@") > > That last was more or less guessed from the binutils/docs/ld page. It's really a bug in lld. You can add LLD_UNSAFE=yes to the port Makefile for now. Here's a simple test case: % cat test.c void _test1() { } asm(".symver _test1, test1@@"); void test2() { } % cat test.map { local: *; }; % clang70 -shared -o libtest.so test.c -fPIC -Wl,--version-script=test.map % readelf -s libtest.so | grep test 8: 0 FILELOCAL DEFAULT ABS test.c 9: 1090 5 FUNCLOCAL DEFAULT9 _test1 10: 1090 5 FUNCLOCAL DEFAULT9 test1 11: 10a0 5 FUNCLOCAL DEFAULT9 test2 % clang70 -shared -o libtest.so test.c -fPIC -Wl,--version-script=test.map -fuse-ld=bfd % readelf -s libtest.so | grep test 3: 0280 5 FUNCGLOBAL DEFAULT 11 test1 34: 0 FILELOCAL DEFAULT ABS test.c 38: 0280 5 FUNCLOCAL DEFAULT 11 _test1 42: 0290 5 FUNCLOCAL DEFAULT 11 test2 46: 0280 5 FUNCGLOBAL DEFAULT 11 test1@@ With lld test1 is local. With GNU ld it's global. The .symver directive should override the version script. ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 2-3-2019 18:35, Tijl Coosemans wrote: On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen wrote: On 2-3-2019 16:21, Tijl Coosemans wrote: On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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 versi
Re: Linking problem with lld
On Sun, 3 Mar 2019 12:50:03 +0100 Willem Jan Withagen wrote: > On 2-3-2019 18:35, Tijl Coosemans wrote: > > On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen > > wrote: > >> On 2-3-2019 16:21, Tijl Coosemans wrote: > >>> On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen > >>> 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 > l
Re: Linking problem with lld
On 3-3-2019 14:45, Willem Jan Withagen wrote: On 3-3-2019 13:34, Tijl Coosemans wrote: On Sun, 3 Mar 2019 12:50:03 +0100 Willem Jan Withagen wrote: On 2-3-2019 18:35, Tijl Coosemans wrote: On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen wrote: On 2-3-2019 16:21, Tijl Coosemans wrote: On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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 ve
Re: Linking problem with lld
On 3-3-2019 13:34, Tijl Coosemans wrote: On Sun, 3 Mar 2019 12:50:03 +0100 Willem Jan Withagen wrote: On 2-3-2019 18:35, Tijl Coosemans wrote: On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen wrote: On 2-3-2019 16:21, Tijl Coosemans wrote: On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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
Re: Linking problem with lld
On Sat, 2 Mar 2019 17:49:25 +0100 Willem Jan Withagen wrote: > On 2-3-2019 16:21, Tijl Coosemans wrote: >> On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen >> 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. ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 2-3-2019 16:21, Tijl Coosemans wrote: On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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". Could it be that the objectfile already has something "wrong"to start with? [~/master] w...@cephdev.digiware.nl> objdump -t ./build/src/librados/CMakeFiles/librados.dir/librados_c.cc.o | grep rados_create 03b0 l F .text 00a6 _ZL16rados_create_cctPKcP18CephInitParameters 01d0 g F .text 01df _rados_create 0460 g F .text 028d _rados_create2 00015410 g F .text 00a4 _rados_create_read_op 06f0 g F .text 0085 _rados_create_with_context 00013a30 g F .text 00a4 _rados_create_write_op 0460 g F .text 028d rados_create2@@ 01d0 g F .text 01df rados_create@@ 00015410 g F .text 00a4 rados_create_read_op@@ 06f0 g F .text 0085 rados_create_with_context@@ 00013a30 g F .text 00a4 rados_create_write_op@@ [~/master] w...@cephdev.digiware.nl> objdump -T ./build/src/librados/CMakeFiles/librados.dir/librados_c.cc.o | grep rados_create objdump: ./build/src/librados/CMakeFiles/librados.dir/librados_c.cc.o: not a dynamic object Exit 1 --WjW ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 2-3-2019 16:21, Tijl Coosemans wrote: On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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. --WjW ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 22-2-2019 23:47, Willem Jan Withagen wrote: On 22-2-2019 22:34, Tijl Coosemans wrote: On Fri, 22 Feb 2019 16:09:09 +0100 Willem Jan Withagen wrote: Hi Ed ea, In het ceph project, they started to use library versioning, so it seems. But compiling/linking that now with Clang and lld I run into trouble building the ceph-tools. This is what I get back of one of the Devs: -- My guess is that your linker doesn't support the new symbol versioning exports and since the symbols are hidden by default they aren't visible in the shared library. Previously there was a bug (since Luminous and the switch the cmake) where every public and private symbol was exported by librados. We just need to know the magic words to use for your compiler/linker to change the symbol visibility to public for the API methods. -- Now I looked thru the options on both Clang and lld, but nothing obviously springs into focus, as to add to change This is how librados is build: /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 -Wno-unused-command-line-argument -fuse-ld=/usr/bin/ld.lld -Wl,--exclude-libs,ALL -Wl,--version-script=/home/jenkins/workspace/ceph-master/src/librados/librados.map Can you provide this librados.map file? https://github.com/ceph/ceph/blob/master/src/librados/librados.map: -- LIBRADOS_PRIVATE { local: *; }; LIBRADOS_14.2.0 { global: extern "C++" { ceph::buffer::v14_2_0::*; librados::v14_2_0::*; "typeinfo for librados::v14_2_0::ObjectOperation"; "typeinfo name for librados::v14_2_0::ObjectOperation"; "vtable for librados::v14_2_0::ObjectOperation"; "typeinfo for librados::v14_2_0::ObjectReadOperation"; "typeinfo name for librados::v14_2_0::ObjectReadOperation"; "vtable for librados::v14_2_0::ObjectReadOperation"; "typeinfo for librados::v14_2_0::ObjectWriteOperation"; "typeinfo name for librados::v14_2_0::ObjectWriteOperation"; "vtable for librados::v14_2_0::ObjectWriteOperation"; "typeinfo for librados::v14_2_0::WatchCtx"; "typeinfo name for librados::v14_2_0::WatchCtx"; "vtable for librados::v14_2_0::WatchCtx"; "typeinfo for librados::v14_2_0::WatchCtx2"; "typeinfo name for librados::v14_2_0::WatchCtx2"; "vtable for librados::v14_2_0::WatchCtx2"; }; } LIBRADOS_PRIVATE; -- --WjW Still haven't been able to work this out, I know a bit more about versioning but I'n not sure that the way selected in Ceph is working for FreeBSD. I've collected most of the essentials below I hope. --WjW So the test program is simple enough: #include "include/rados/librados.h" #include "gtest/gtest.h" TEST(Librados, CreateShutdown) { rados_t cluster; int err; err = rados_create(&cluster, "someid"); EXPECT_EQ(err, 0); rados_shutdown(cluster); } librados is big, but in summary the releavant parts are: #ifdef __cplusplus extern "C" { #endif . #define CEPH_RADOS_API . CEPH_RADOS_API int rados_create(rados_t *cluster, const char * const id); CEPH_RADOS_API void rados_shutdown(rados_t cluster); #ifdef __cplusplus } #endif And in the implementation of librados in `librados_c.cc` it looks like: #define LIBRADOS_C_API_BASE(fn) \ asm(".symver _" #fn "_base, " #fn "@") #define LIBRADOS_C_API_BASE_DEFAULT(fn) \ asm(".symver _" #fn ", " #fn "@@") #define LIBRADOS_C_API_DEFAULT(fn, ver) \ asm(".symver _" #fn ", " #fn "@@LIBRADOS_" #ver) extern "C" int _rados_create(rados_t *pcluster, const char * const id) { ... } LIBRADOS_C_API_BASE_DEFAULT(rados_create); extern "C" void _rados_shutdown(rados_t cluster) { ... } LIBRADOS_C_API_BASE_DEFAULT(rados_shutdown); Then this is the Cmake receipe to bolt it all together into librados.so.2.0.0: # C/C++ API add_library(librados ${CEPH_SHARED} librados_c.cc librados_cxx.cc $) if(ENABLE_SHARED) set_target_properties(librados PROPERTIES OUTPUT_NAME rados VERSION 2.0.0 SOVERSION 2 V
Re: Linking problem with lld
On Sat, 2 Mar 2019 14:21:57 +0100 Willem Jan Withagen 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". ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 22-2-2019 22:34, Tijl Coosemans wrote: On Fri, 22 Feb 2019 16:09:09 +0100 Willem Jan Withagen wrote: Hi Ed ea, In het ceph project, they started to use library versioning, so it seems. But compiling/linking that now with Clang and lld I run into trouble building the ceph-tools. This is what I get back of one of the Devs: -- My guess is that your linker doesn't support the new symbol versioning exports and since the symbols are hidden by default they aren't visible in the shared library. Previously there was a bug (since Luminous and the switch the cmake) where every public and private symbol was exported by librados. We just need to know the magic words to use for your compiler/linker to change the symbol visibility to public for the API methods. -- Now I looked thru the options on both Clang and lld, but nothing obviously springs into focus, as to add to change This is how librados is build: /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 -Wno-unused-command-line-argument -fuse-ld=/usr/bin/ld.lld -Wl,--exclude-libs,ALL -Wl,--version-script=/home/jenkins/workspace/ceph-master/src/librados/librados.map Can you provide this librados.map file? https://github.com/ceph/ceph/blob/master/src/librados/librados.map: -- LIBRADOS_PRIVATE { local: *; }; LIBRADOS_14.2.0 { global: extern "C++" { ceph::buffer::v14_2_0::*; librados::v14_2_0::*; "typeinfo for librados::v14_2_0::ObjectOperation"; "typeinfo name for librados::v14_2_0::ObjectOperation"; "vtable for librados::v14_2_0::ObjectOperation"; "typeinfo for librados::v14_2_0::ObjectReadOperation"; "typeinfo name for librados::v14_2_0::ObjectReadOperation"; "vtable for librados::v14_2_0::ObjectReadOperation"; "typeinfo for librados::v14_2_0::ObjectWriteOperation"; "typeinfo name for librados::v14_2_0::ObjectWriteOperation"; "vtable for librados::v14_2_0::ObjectWriteOperation"; "typeinfo for librados::v14_2_0::WatchCtx"; "typeinfo name for librados::v14_2_0::WatchCtx"; "vtable for librados::v14_2_0::WatchCtx"; "typeinfo for librados::v14_2_0::WatchCtx2"; "typeinfo name for librados::v14_2_0::WatchCtx2"; "vtable for librados::v14_2_0::WatchCtx2"; }; } LIBRADOS_PRIVATE; -- --WjW ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On Fri, 22 Feb 2019 16:09:09 +0100 Willem Jan Withagen wrote: > Hi Ed ea, > > In het ceph project, they started to use library versioning, so it seems. > > But compiling/linking that now with Clang and lld I run into trouble > building the ceph-tools. > > This is what I get back of one of the Devs: > -- > My guess is that your linker doesn't support the new symbol versioning > exports and since the symbols are hidden by default they aren't visible > in the shared library. Previously there was a bug (since Luminous and > the switch the cmake) where every public and private symbol was exported > by librados. > > We just need to know the magic words to use for your compiler/linker to > change the symbol visibility to public for the API methods. > > -- > > Now I looked thru the options on both Clang and lld, but nothing > obviously springs into focus, as to add to change > > This is how librados is build: > /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 > -Wno-unused-command-line-argument -fuse-ld=/usr/bin/ld.lld > -Wl,--exclude-libs,ALL > -Wl,--version-script=/home/jenkins/workspace/ceph-master/src/librados/librados.map > Can you provide this librados.map file? ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On 22-2-2019 21:09, Ed Maste wrote: On Fri, 22 Feb 2019 at 10:09, Willem Jan Withagen wrote: My guess is that your linker doesn't support the new symbol versioning exports and since the symbols are hidden by default they aren't visible in the shared library. Previously there was a bug (since Luminous and the switch the cmake) where every public and private symbol was exported by librados. lld is largely compatible with GNU ld / gold on the command-line and in linker scripts and version scripts. Can you provide the error you see or an example of one of the symbols with incorrect visibility? It could very be that the way versioning is introduced in the project is not compatible with Clang, since the general compiler used is GCC. I was afraid that that was going to be the counter question?? 8-( This occurs while building Ceph, which is a "rather" large package with a lot of include subpackages... and some local patches for things that have not been send upstream. But lets start with the error reported: ld.lld: error: undefined symbol: rados_aio_get_return_value referenced by cls_journal_client.cc:29 (/home/jenkins/workspace/ceph-master/src/cls/journal/cls_journal_client.cc:29) cls_journal_client.cc.o:(cls::journal::client::(anonymous namespace)::C_AioExec::rados_callback(void*, void*)) in archive ../../../lib/libcls_journal_client.a c++: error: linker command failed with exit code 1 (use -v to see invocation) gmake[2]: *** [src/test/cls_journal/CMakeFiles/ceph_test_cls_journal.dir/build.make:129: bin/ceph_test_cls_journal] Error 1 gmake[2]: Leaving directory '/home/jenkins/workspace/ceph-master/build' gmake[1]: *** [CMakeFiles/Makefile2:11020: src/test/cls_journal/CMakeFiles/ceph_test_cls_journal.dir/all] Error 2 === Not sure what you can make of this. --WjW ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"
Re: Linking problem with lld
On Fri, 22 Feb 2019 at 10:09, Willem Jan Withagen wrote: > > My guess is that your linker doesn't support the new symbol versioning > exports and since the symbols are hidden by default they aren't visible > in the shared library. Previously there was a bug (since Luminous and > the switch the cmake) where every public and private symbol was exported > by librados. lld is largely compatible with GNU ld / gold on the command-line and in linker scripts and version scripts. Can you provide the error you see or an example of one of the symbols with incorrect visibility? ___ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"