I've made some progress getting the code to compile. I've fixed a few compile
errors, but now I'm getting a linker error that I'm not able to figure out. the
error occurs during
make test_cors
[100%] Linking CXX executable ../../bin/test_cors
/usr/bin/ld: ../../lib/libcls_otp_client.a(cls_otp_client.cc.o): in function
`rados::cls::otp::OTP::check(CephContext*, librados::v14_2_0::IoCtx&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, rados::cls::otp::otp_check_t*)':
/home/sharath/os/ceph-master/src/cls/otp/cls_otp_client.cc:65: undefined reference to
`gen_rand_alphanumeric(CephContext*, char*, int)'
But the function gen_rand_alphanumeric which is linked from rgw_common.cc seems to be
fine.
With
make VERBOSE=1 test_cors
The exact command which is failing is
[sharath@raspberrypi /home/sharath/os/ceph-master/build/src/test]$ /usr/bin/g++ -Wall
-Wtype-limits -Wignored-qualifiers -Winit-self -Wpointer-arith -Werror=format-security
-fno-strict-aliasing -fsigned-char -Wno-unknown-pragmas -rdynamic -ftemplate-depth-1024
-Wnon-virtual-dtor -Wno-unknown-pragmas -Wno-ignored-qualifiers -Wstrict-null-sentinel
-Woverloaded-virtual -fno-new-ttp-matching -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
-fstack-protector-strong -fdiagnostics-color=auto -O2 -g -DNDEBUG -pie
CMakeFiles/test_cors.dir/test_cors.cc.o -o ../../bin/test_cors
-Wl,-rpath,/home/sharath/os/ceph-master/build/lib ../../lib/librgw_a.a
../../lib/libamqp_mock.a ../../lib/libglobal.a /usr/lib/arm-linux-gnueabihf/libblkid.so
/usr/lib/arm-linux-gnueabihf/libcurl.so /usr/lib/arm-linux-gnueabihf/libexpat.so -ldl
../../lib/libgmock_main.a ../../lib/libgmock.a ../../lib/libgtest.a -lpthread
/usr/lib/arm-linux-gnueabihf/libldap.so /usr/lib/arm-linux-gnueabihf/liblber.so -ldl
../../lib/librados.so.2.0.0 -lrt ../../lib/libcls_otp_client.a
../../lib/libcls_lock_client.a ../../lib/libcls_rgw_client.a
../../lib/libcls_refcount_client.a ../../lib/libcls_log_client.a
../../lib/libcls_timeindex_client.a ../../lib/libcls_version_client.a
../../lib/libcls_user_client.a ../../lib/libceph-common.so.0
/usr/lib/arm-linux-gnueabihf/libblkid.so -lresolv ../../lib/libjson_spirit.a
../../lib/liberasure_code.a -ldl ../../lib/libcrc32.a ../../lib/libarch.a
../../boost/lib/libboost_random.a ../../boost/lib/libboost_program_options.a
../../boost/lib/libboost_iostreams.a ../../boost/lib/libboost_regex.a -lstdc++fs
/lib/arm-linux-gnueabihf/libudev.so /usr/lib/arm-linux-gnueabihf/libibverbs.so
/usr/lib/arm-linux-gnueabihf/librdmacm.so /usr/lib/arm-linux-gnueabihf/libz.so
../../lib/libcommon_utf8.a /usr/lib/arm-linux-gnueabihf/libcrypto.so /usr/lib/liboath.so
../../boost/lib/libboost_coroutine.a ../../boost/lib/libboost_context.a
../../boost/lib/libboost_thread.a ../../boost/lib/libboost_atomic.a
../../boost/lib/libboost_system.a ../../boost/lib/libboost_date_time.a
../../boost/lib/libboost_chrono.a -lpthread -Wl,--as-needed -latomic
Just to make sure the symbol is present, i dumped the symbol table for librgw_a.a and the
symbols seems to be present.
[sharath@raspberrypi /home/sharath/os/ceph-master/build]$ objdump -t lib/librgw_a.a | grep
gen_rand_alphanumeric
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_plainP11CephContextPci
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_upperP11CephContextPci
00000dec g F .text 00000078 _Z27gen_rand_alphanumeric_upperP11CephContextPci
00000e64 g F .text 0000007c _Z27gen_rand_alphanumeric_lowerP11CephContextPci
00000ee0 g F .text 00000068 _Z21gen_rand_alphanumericP11CephContextPci
00000f48 g F .text 00000068 _Z35gen_rand_alphanumeric_no_underscoreP11CephContextPci
00000fb0 g F .text 00000080 _Z27gen_rand_alphanumeric_plainP11CephContextPci
00001da8 g F .text 0000008c
_Z27gen_rand_alphanumeric_lowerP11CephContextPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000
_Z27gen_rand_alphanumeric_lowerP11CephContextPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z35gen_rand_alphanumeric_no_underscoreP11CephContextPci
00000000 *UND* 00000000
_Z27gen_rand_alphanumeric_lowerP11CephContextPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z21gen_rand_alphanumericP11CephContextPci
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_plainP11CephContextPci
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_upperP11CephContextPci
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_plainP11CephContextPci
00000000 *UND* 00000000 _Z27gen_rand_alphanumeric_upperP11CephContextPci
Furthermore the output from a successful compile on an AMD64 also gives a similar symbol
table. Why is the linker not able to find gen_rand_alphanumeric on arm64?
Plz help
Thanks
Sharath