Skip to content

Build fails due to symbol redefinition in abseil-cpp when using gRPC v1.72.0 #39592

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
BohdanBuinich opened this issue May 17, 2025 · 2 comments

Comments

@BohdanBuinich
Copy link

What version of gRPC and what language are you using?

1.72.0

What operating system (Linux, Windows,...) and version?

Ubuntu 24.04

What runtime / compiler are you using (e.g. python version or version of gcc)

gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0

What did you do?

Tried building gRPC v1.72.0 using either CPMAddPackage or FetchContent. Compilation fails due to multiple symbol redefinitions in Abseil's time-related sources.
Reproduction Steps:

Using FetchContent:

# Using FetchContent (same issue with CPMAddPackage)
set(protobuf_INSTALL OFF)
set(utf8_range_ENABLE_INSTALL OFF)

FetchContent_Declare(
  gRPC
  GIT_REPOSITORY https://github.com/grpc/grpc
  GIT_TAG v1.72.0
  GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(gRPC)

add_library(gRPC::grpc++ ALIAS grpc++)
add_executable(gRPC::grpc_cpp_plugin ALIAS grpc_cpp_plugin)

Using CPM:

CPMAddPackage(URI "gh:grpc/grpc@1.72.0" OPTIONS "protobuf_INSTALL OFF" "utf8_range_ENABLE_INSTALL OFF")

add_library(gRPC::grpc++ ALIAS grpc++)
add_executable(gRPC::grpc_cpp_plugin ALIAS grpc_cpp_plugin)

What did you expect to see?

Successful build of gRPC and dependencies without errors.

What did you see instead?

Build fails due to symbol redefinitions caused by Abseil being compiled with unity builds enabled:

[53/490] Building CXX object _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx.o
FAILED: _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx.o 
/usr/bin/c++  -isystem test_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp -g -std=c++20 -fPIC -fdiagnostics-color=always -Wall -Wextra -Wcast-qual -Wconversion-null -Wformat-security -Wmissing-declarations -Wnon-virtual-dtor -Woverlength-strings -Wpointer-arith -Wundef -Wunused-local-typedefs -Wunused-result -Wvarargs -Wvla -Wwrite-strings -DNOMINMAX -MD -MT _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx.o -MF _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx.o.d -o _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx.o -c test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx
In file included from test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx:16:
test_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp/absl/time/time.cc:54:40: error: redefinition of ‘absl::lts_20250127::time_internal::cctz::time_point<std::chrono::duration<long int> > absl::lts_20250127::{anonymous}::unix_epoch()’
   54 | inline cctz::time_point<cctz::seconds> unix_epoch() {
      |                                        ^~~~~~~~~~
In file included from test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time.dir/Unity/unity_0_cxx.cxx:13:
test_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp/absl/time/format.cc:47:40: note: ‘absl::lts_20250127::time_internal::cctz::time_point<std::chrono::duration<long int> > absl::lts_20250127::{anonymous}::unix_epoch()’ previously defined here
   47 | inline cctz::time_point<cctz::seconds> unix_epoch() {
      |                                        ^~~~~~~~~~
[54/490] Building CXX object _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx.o
FAILED: _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx.o 
/usr/bin/c++  -Itest_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp -g -std=c++20 -fPIC -fdiagnostics-color=always -Wall -Wextra -Wcast-qual -Wconversion-null -Wformat-security -Wmissing-declarations -Wnon-virtual-dtor -Woverlength-strings -Wpointer-arith -Wundef -Wunused-local-typedefs -Wunused-result -Wvarargs -Wvla -Wwrite-strings -DNOMINMAX -MD -MT _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx.o -MF _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx.o.d -o _deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx.o -c test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx
In file included from test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx:25:
test_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc:31:12: error: redefinition of ‘const char absl::lts_20250127::time_internal::cctz::{anonymous}::kDigits []’
   31 | const char kDigits[] = "0123456789";
      |            ^~~~~~~
In file included from test_cpp/cmake-build-debug/_deps/grpc-build/third_party/abseil-cpp/absl/time/CMakeFiles/absl_time_zone.dir/Unity/unity_0_cxx.cxx:4:
test_cpp/cmake-build-debug/_deps/grpc-src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc:35:12: note: ‘const char absl::lts_20250127::time_internal::cctz::{anonymous}::kDigits [11]’ previously defined here
   35 | const char kDigits[] = "0123456789";
      |            ^~~~~~~
@rishesh007
Copy link
Contributor

@BohdanBuinich you have to set this before declaring anything using abseil

set(ABSL_ENABLE_INSTALL ON CACHE BOOL "" FORCE)

@BohdanBuinich
Copy link
Author

@rishesh007 Apologies, it was my mistake. I had enabled Unity builds in CMake using:

set(CMAKE_UNITY_BUILD ON)

This caused the build to fail because multiple translation units were combined, leading to conflicts. Disabling Unity builds resolved the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy