-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Description
Describe the issue
While conda-forge/grpc-cpp-feedstock#348 grpc with -DgRPC_ABSL_PROVIDER="package" in conda-forge against abseil 20240116.0, the sanity check of compiling an example against the library fails:
[7/18] Linking CXX executable greeter_client
FAILED: greeter_client
: && $PREFIX/bin/x86_64-conda-linux-gnu-c++ -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/libgrpc-1.61.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib CMakeFiles/greeter_client.dir/greeter_client.cc.o -o greeter_client libhw_grpc_proto.a $PREFIX/lib/libabsl_flags_parse.so.2401.0.0 $PREFIX/lib/libgrpc++_reflection.so.1.61.0 $PREFIX/lib/libgrpc++.so.1.61.0 $PREFIX/lib/libprotobuf.so.25.2.0 $PREFIX/lib/libgrpc.so.38.0.0 $PREFIX/lib/libaddress_sorting.so.38.0.0 $PREFIX/lib/libupb_json_lib.so.38.0.0 $PREFIX/lib/libupb_textformat_lib.so.38.0.0 $PREFIX/lib/libupb_message_lib.so.38.0.0 $PREFIX/lib/libupb_base_lib.so.38.0.0 $PREFIX/lib/libupb_mem_lib.so.38.0.0 $PREFIX/lib/libutf8_range_lib.so.38.0.0 $PREFIX/lib/libssl.so $PREFIX/lib/libcrypto.so $PREFIX/lib/libgpr.so.38.0.0 -ldl -lm -lrt $PREFIX/lib/libabsl_random_distributions.so.2401.0.0 $PREFIX/lib/libabsl_random_seed_sequences.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_pool_urbg.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_randen.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_randen_hwaes.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_randen_hwaes_impl.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_randen_slow.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_platform.so.2401.0.0 $PREFIX/lib/libabsl_random_internal_seed_material.so.2401.0.0 $PREFIX/lib/libabsl_random_seed_gen_exception.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_check_op.so.2401.0.0 $PREFIX/lib/libabsl_leak_check.so.2401.0.0 $PREFIX/lib/libabsl_die_if_null.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_conditions.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_message.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_nullguard.so.2401.0.0 $PREFIX/lib/libabsl_examine_stack.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_format.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_proto.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_log_sink_set.so.2401.0.0 $PREFIX/lib/libabsl_log_sink.so.2401.0.0 $PREFIX/lib/libabsl_log_entry.so.2401.0.0 $PREFIX/lib/libabsl_log_initialize.so.2401.0.0 $PREFIX/lib/libabsl_log_globals.so.2401.0.0 $PREFIX/lib/libabsl_vlog_config_internal.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_fnmatch.so.2401.0.0 $PREFIX/lib/libabsl_log_internal_globals.so.2401.0.0 $PREFIX/lib/libabsl_statusor.so.2401.0.0 $PREFIX/lib/libabsl_status.so.2401.0.0 $PREFIX/lib/libabsl_strerror.so.2401.0.0 $PREFIX/lib/libabsl_flags_usage.so.2401.0.0 $PREFIX/lib/libabsl_flags_usage_internal.so.2401.0.0 $PREFIX/lib/libabsl_flags_internal.so.2401.0.0 $PREFIX/lib/libabsl_flags_marshalling.so.2401.0.0 $PREFIX/lib/libabsl_flags_reflection.so.2401.0.0 $PREFIX/lib/libabsl_flags_config.so.2401.0.0 $PREFIX/lib/libabsl_cord.so.2401.0.0 $PREFIX/lib/libabsl_cordz_info.so.2401.0.0 $PREFIX/lib/libabsl_cord_internal.so.2401.0.0 $PREFIX/lib/libabsl_cordz_functions.so.2401.0.0 $PREFIX/lib/libabsl_cordz_handle.so.2401.0.0 $PREFIX/lib/libabsl_crc_cord_state.so.2401.0.0 $PREFIX/lib/libabsl_crc32c.so.2401.0.0 $PREFIX/lib/libabsl_str_format_internal.so.2401.0.0 $PREFIX/lib/libabsl_crc_internal.so.2401.0.0 $PREFIX/lib/libabsl_crc_cpu_detect.so.2401.0.0 $PREFIX/lib/libabsl_raw_hash_set.so.2401.0.0 $PREFIX/lib/libabsl_hash.so.2401.0.0 $PREFIX/lib/libabsl_bad_variant_access.so.2401.0.0 $PREFIX/lib/libabsl_city.so.2401.0.0 $PREFIX/lib/libabsl_low_level_hash.so.2401.0.0 $PREFIX/lib/libabsl_hashtablez_sampler.so.2401.0.0 $PREFIX/lib/libabsl_exponential_biased.so.2401.0.0 $PREFIX/lib/libabsl_flags_private_handle_accessor.so.2401.0.0 $PREFIX/lib/libabsl_flags_commandlineflag.so.2401.0.0 $PREFIX/lib/libabsl_bad_optional_access.so.2401.0.0 $PREFIX/lib/libabsl_flags_commandlineflag_internal.so.2401.0.0 $PREFIX/lib/libabsl_flags_program_name.so.2401.0.0 $PREFIX/lib/libabsl_synchronization.so.2401.0.0 $PREFIX/lib/libabsl_graphcycles_internal.so.2401.0.0 $PREFIX/lib/libabsl_kernel_timeout_internal.so.2401.0.0 $PREFIX/lib/libabsl_time.so.2401.0.0 $PREFIX/lib/libabsl_civil_time.so.2401.0.0 $PREFIX/lib/libabsl_time_zone.so.2401.0.0 $PREFIX/lib/libabsl_stacktrace.so.2401.0.0 $PREFIX/lib/libabsl_symbolize.so.2401.0.0 $PREFIX/lib/libabsl_strings.so.2401.0.0 $PREFIX/lib/libabsl_strings_internal.so.2401.0.0 $PREFIX/lib/libabsl_string_view.so.2401.0.0 $PREFIX/lib/libabsl_int128.so.2401.0.0 $PREFIX/lib/libabsl_throw_delegate.so.2401.0.0 $PREFIX/lib/libabsl_malloc_internal.so.2401.0.0 $PREFIX/lib/libabsl_debugging_internal.so.2401.0.0 $PREFIX/lib/libabsl_demangle_internal.so.2401.0.0 $PREFIX/lib/libabsl_base.so.2401.0.0 -lpthread $PREFIX/lib/libabsl_raw_logging_internal.so.2401.0.0 $PREFIX/lib/libabsl_log_severity.so.2401.0.0 $PREFIX/lib/$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o): in function `grpc::CompletionQueue::~CompletionQueue()':
helloworld.grpc.pb.cc:(.text._ZN4grpc15CompletionQueueD2Ev[_ZN4grpc15CompletionQueueD5Ev]+0x4d): undefined reference to `absl::lts_20240116::Mutex::Dtor()'
$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o): in function `grpc::ClientReader<helloworld::HelloReply>::~ClientReader()':
helloworld.grpc.pb.cc:(.text._ZN4grpc12ClientReaderIN10helloworld10HelloReplyEED2Ev[_ZN4grpc12ClientReaderIN10helloworld10HelloReplyEED5Ev]+0x6c): undefined reference to `absl::lts_20240116::Mutex::Dtor()'
$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o): in function `non-virtual thunk to grpc::ClientReader<helloworld::HelloReply>::~ClientReader()':
helloworld.grpc.pb.cc:(.text._ZN4grpc12ClientReaderIN10helloworld10HelloReplyEED2Ev[_ZN4grpc12ClientReaderIN10helloworld10HelloReplyEED5Ev]+0x10c): undefined reference to `absl::lts_20240116::Mutex::Dtor()'
$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o): in function `non-virtual thunk to grpc::ClientReaderWriter<helloworld::HelloRequest, helloworld::HelloReply>::~ClientReaderWriter()':
helloworld.grpc.pb.cc:(.text._ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED2Ev[_ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED5Ev]+0x7c): undefined reference to `absl::lts_20240116::Mutex::Dtor()'
$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o): in function `grpc::ClientReaderWriter<helloworld::HelloRequest, helloworld::HelloReply>::~ClientReaderWriter()':
helloworld.grpc.pb.cc:(.text._ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED2Ev[_ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED5Ev]+0x12c): undefined reference to `absl::lts_20240116::Mutex::Dtor()'
$PREFIX/x86_64-conda-linux-gnu/bin/ld: libhw_grpc_proto.a(helloworld.grpc.pb.cc.o):helloworld.grpc.pb.cc:(.text._ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED2Ev[_ZN4grpc18ClientReaderWriterIN10helloworld12HelloRequestENS1_10HelloReplyEED5Ev]+0x1dc): more undefined references to `absl::lts_20240116::Mutex::Dtor()' follow
collect2: error: ld returned 1 exit status
Previously I had opened #1614 and grpc/grpc#35854, but it now looks like this might be related to f3760b4. In particular, the following looks like a likely culprit
abseil-cpp/absl/synchronization/mutex.cc
Lines 734 to 739 in 119e0d3
| #if defined(__APPLE__) || defined(ABSL_BUILD_DLL) | |
| // When building a dll symbol export lists may reference the destructor | |
| // and want it to be an exported symbol rather than an inline function. | |
| // Some apple builds also do dynamic library build but don't say it explicitly. | |
| Mutex::~Mutex() { Dtor(); } | |
| #endif |
I'm not sure what grpc does that (apparently) invalidates the assumptions explained in the commit message of that change.
Steps to reproduce the problem
Build https://github.com/grpc/grpc with -DgRPC_ABSL_PROVIDER="package" against abseil 20240116.0 and then compile the grpc helloworld example. It would also be possible to replay the recipe we have in conda-forge.
What version of Abseil are you using?
20240116.0
What operating system and version are you using?
Linux
What compiler and version are you using?
GCC 12
What build system are you using?
CMake
Additional context
No response