Commit 81ef8d5
committed
librados: disable symbol versions when building statically
When building internal libraries statically with `-DENABLE_SHARED=no`,
linking `librados.a` always fails because the
`LIBRADOS_C_API_DEFAULT_F` macro inserts an underscore prefix to all
exported symbols. It does this so a versioned symbol with the real
name can be created. Symbol versions however only work with shared
libraries, and the linker fails to find the prefix-less symbols:
FAILED: bin/ceph_radosacl
: && /usr/bin/c++ -O0 -fPIC -fuse-ld=mold -Og -g -rdynamic src/tools/CMakeFiles/ceph_radosacl.dir/radosacl.cc.o -o bin/ceph_radosacl -Wl,-rpath,::::::::::::::::::::::::::::::: lib/liblibrados.a lib/libglobal.a lib/liblibrados_impl.a lib/libosdc.a lib/libcls_lock_client.a lib/libceph-common.a /usr/lib/aarch64-linux-gnu/libblkid.so /usr/lib/aarch64-linux-gnu/libcrypto.so lib/libjson_spirit.a lib/libcommon_utf8.a lib/libextblkdev.a -lcap boost/lib/libboost_thread.a boost/lib/libboost_chrono.a boost/lib/libboost_atomic.a boost/lib/libboost_system.a boost/lib/libboost_random.a boost/lib/libboost_program_options.a boost/lib/libboost_date_time.a boost/lib/libboost_iostreams.a boost/lib/libboost_regex.a lib/libfmtd.a lib/liberasure_code.a /usr/lib/aarch64-linux-gnu/libudev.so /usr/lib/aarch64-linux-gnu/libz.so -ldl /usr/lib/aarch64-linux-gnu/librt.a -lresolv -Wl,--as-needed -latomic && :
mold: error: undefined symbol: rados_conf_parse_env
>>> referenced by librados_cxx.cc
>>> lib/liblibrados.a(librados_cxx.cc.o):(librados::v14_2_0::Rados::conf_parse_env(char const*) const)
mold: error: undefined symbol: rados_nobjects_list_seek
>>> referenced by librados_cxx.cc
>>> lib/liblibrados.a(librados_cxx.cc.o):(librados::NObjectIteratorImpl::seek(unsigned int))
mold: error: undefined symbol: rados_conf_parse_argv_remainder
>>> referenced by librados_cxx.cc
>>> lib/liblibrados.a(librados_cxx.cc.o):(librados::v14_2_0::Rados::conf_parse_argv_remainder(int, char const**, char const**) const)
mold: error: undefined symbol: rados_version
>>> referenced by librados_cxx.cc
>>> lib/liblibrados.a(librados_cxx.cc.o):(librados::v14_2_0::Rados::version(int*, int*, int*))
mold: error: undefined symbol: rados_nobjects_list_next2
>>> referenced by librados_c.cc
>>> lib/liblibrados.a(librados_c.cc.o):(_rados_nobjects_list_next)
>>> referenced by librados_cxx.cc
>>> lib/liblibrados.a(librados_cxx.cc.o):(librados::NObjectIteratorImpl::get_next())
Signed-off-by: Max Kellermann <[email protected]>1 parent 0d56b61 commit 81ef8d5
2 files changed
+2
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| 32 | + | |
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
0 commit comments