abseil-cpp icon indicating copy to clipboard operation
abseil-cpp copied to clipboard

Build gRPC shared against abseil static: undefined reference to nan@@GLIBC_2.2.5 in `charconv.cc` (`absl_strings`) on Linux

Open SpaceIm opened this issue 4 years ago • 0 comments

Describe the bug

Undefined reference to nan in charconv.cc (absl_strings) while building gRPC shared against abseil static on Linux with gcc-10:

[ 98%] Linking CXX shared library ../lib/libgrpc++.so
/usr/bin/ld: /home/conan/w/BuildSingleReference/.conan/data/abseil/20211102.0/_/_/package/b173bbda18164d49a449ffadc1c9e817f49e819d/lib/libabsl_strings.a(charconv.cc.o): undefined reference to symbol 'nan@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line

Steps to reproduce the bug

  • Linux and C++ lib without nan implementation in std:: namespace I guess.
  • Build abseil static
  • Build gRPC shared

What version of Abseil are you using?

20211102.0

What operating system and version are you using

Some linux distribution, ubuntu 20 I guess (a docker of a CI I don't control so sorry not much information).

What compiler and version are you using?

gcc-10

What build system are you using?

CMake

Additional context

I think that absl_strings may depend on libm instead of libstdc++ only, due to https://github.com/abseil/abseil-cpp/blob/fbbb5865a562c9a9167d71c1cf56b82025a8f065/absl/strings/charconv.cc#L86-L91

So I guess it's sufficient to link directly to libm in case of, and add this in CMakeLists of absl_strings, so that libm is properly propagated in CMake imported target if static:

find_library(LIBM m)

absl_cc_library(
  NAME
    strings
...
  LINKOPTS
    $<$<BOOL:${LIBM}>:-lm>
...

SpaceIm avatar Jan 23 '22 22:01 SpaceIm