Skip to content

Linking error with prebuilt opentelemetry-cpp and gcc 4.8 #834

Description

@owent

Describe your environment
cmake 3.20.0
gcc 4.8
centos 7

Steps to reproduce
Using cmake to build and install opentelemetry-cpp, and then use installed opentelemetry-cpp targets (cmake config) to link.

What is the expected behavior?
Success

What is the actual behavior?

../../third_party/install/linux-x86_64-gnu/lib64/libopentelemetry_trace.a(tracer.cc.o): In function `opentelemetry::v0::nostd::shared_ptr<opentelemetry::v0::trace::Span>& absl::otel_v1::variant_internal::TypedThrowBadVariantAccess<opentelemetry::v0::nostd::shared_ptr<opentelemetry::v0::trace::Span>&>()':
tracer.cc:(.text._ZN4absl7otel_v116variant_internal26TypedThrowBadVariantAccessIRN13opentelemetry2v05nostd10shared_ptrINS4_5trace4SpanEEEEET_v[_ZN4absl7otel_v116variant_internal26TypedThrowBadVariantAccessIRN13opentelemetry2v05nostd10shared_ptrINS4_5trace4SpanEEEEET_v]+0x5): undefined reference to `absl::otel_v1::variant_internal::ThrowBadVariantAccess()'
../../third_party/install/linux-x86_64-gnu/lib64/libopentelemetry_exporter_ostream_span.a(span_exporter.cc.o): In function `absl::otel_v1::variant<bool, int, unsigned int, long, double, std::string, std::vector<bool, std::allocator<bool> >, std::vector<int, std::allocator<int> >, std::vector<unsigned int, std::allocator<unsigned int> >, std::vector<long, std::allocator<long> >, std::vector<double, std::allocator<double> >, std::vector<std::string, std::allocator<std::string> >, unsigned long, std::vector<unsigned long, std::allocator<unsigned long> >, std::vector<unsigned char, std::allocator<unsigned char> > > absl::otel_v1::variant_internal::PerformVisitation<opentelemetry::v0::sdk::common::AttributeConverter&, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v0::nostd::string_view, opentelemetry::v0::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<opentelemetry::v0::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v0::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v0::nostd::span<unsigned char const, 18446744073709551615ul> > const&>::Run<0ul, 18446744073709551615ul>(std::integral_constant<bool, true>, absl::otel_v1::integer_sequence<unsigned long, 0ul>, std::integral_constant<unsigned long, 18446744073709551615ul>) const':
span_exporter.cc:(.text._ZNK4absl7otel_v116variant_internal17PerformVisitationIRN13opentelemetry2v03sdk6common18AttributeConverterEIRKNS0_7variantIIbiljdPKcNS4_5nostd11string_viewENSC_4spanIKbLm18446744073709551615EEENSE_IKiLm18446744073709551615EEENSE_IKlLm18446744073709551615EEENSE_IKjLm18446744073709551615EEENSE_IKdLm18446744073709551615EEENSE_IKSD_Lm18446744073709551615EEEmNSE_IKmLm18446744073709551615EEENSE_IKhLm18446744073709551615EEEEEEEE3RunIILm0EEILm18446744073709551615EEEENS9_IIbijldSsSt6vectorIbSaIbEES10_IiSaIiEES10_IjSaIjEES10_IlSaIlEES10_IdSaIdEES10_ISsSaISsEEmS10_ImSaImEES10_IhSaIhEEEEESt17integral_constantIbLb1EENS0_16integer_sequenceImIXspT_EEEEDpS1I_ImXT0_EE[_ZNK4absl7otel_v116variant_internal17PerformVisitationIRN13opentelemetry2v03sdk6common18AttributeConverterEIRKNS0_7variantIIbiljdPKcNS4_5nostd11string_viewENSC_4spanIKbLm18446744073709551615EEENSE_IKiLm18446744073709551615EEENSE_IKlLm18446744073709551615EEENSE_IKjLm18446744073709551615EEENSE_IKdLm18446744073709551615EEENSE_IKSD_Lm18446744073709551615EEEmNSE_IKmLm18446744073709551615EEENSE_IKhLm18446744073709551615EEEEEEEE3RunIILm0EEILm18446744073709551615EEEENS9_IIbijldSsSt6vectorIbSaIbEES10_IiSaIiEES10_IjSaIjEES10_IlSaIlEES10_IdSaIdEES10_ISsSaISsEEmS10_ImSaImEES10_IhSaIhEEEEESt17integral_constantIbLb1EENS0_16integer_sequenceImIXspT_EEEEDpS1I_ImXT0_EE]+0x11): undefined reference to `absl::otel_v1::variant_internal::ThrowBadVariantAccess()'
../../third_party/install/linux-x86_64-gnu/lib64/libopentelemetry_exporter_ostream_span.a(span_exporter.cc.o): In function `void absl::otel_v1::variant_internal::PerformVisitation<opentelemetry::v0::exporter::trace::OStreamSpanExporter::OwnedAttributeValueVisitor, absl::otel_v1::variant<bool, int, unsigned int, long, double, std::string, std::vector<bool, std::allocator<bool> >, std::vector<int, std::allocator<int> >, std::vector<unsigned int, std::allocator<unsigned int> >, std::vector<long, std::allocator<long> >, std::vector<double, std::allocator<double> >, std::vector<std::string, std::allocator<std::string> >, unsigned long, std::vector<unsigned long, std::allocator<unsigned long> >, std::vector<unsigned char, std::allocator<unsigned char> > > const&>::Run<0ul, 18446744073709551615ul>(std::integral_constant<bool, true>, absl::otel_v1::integer_sequence<unsigned long, 0ul>, std::integral_constant<unsigned long, 18446744073709551615ul>) const':
span_exporter.cc:(.text._ZNK4absl7otel_v116variant_internal17PerformVisitationIN13opentelemetry2v08exporter5trace19OStreamSpanExporter26OwnedAttributeValueVisitorEIRKNS0_7variantIIbijldSsSt6vectorIbSaIbEESA_IiSaIiEESA_IjSaIjEESA_IlSaIlEESA_IdSaIdEESA_ISsSaISsEEmSA_ImSaImEESA_IhSaIhEEEEEEE3RunIILm0EEILm18446744073709551615EEEEvSt17integral_constantIbLb1EENS0_16integer_sequenceImIXspT_EEEEDpSW_ImXT0_EE[_ZNK4absl7otel_v116variant_internal17PerformVisitationIN13opentelemetry2v08exporter5trace19OStreamSpanExporter26OwnedAttributeValueVisitorEIRKNS0_7variantIIbijldSsSt6vectorIbSaIbEESA_IiSaIiEESA_IjSaIjEESA_IlSaIlEESA_IdSaIdEESA_ISsSaISsEEmSA_ImSaImEESA_IhSaIhEEEEEEE3RunIILm0EEILm18446744073709551615EEEEvSt17integral_constantIbLb1EENS0_16integer_sequenceImIXspT_EEEEDpSW_ImXT0_EE]+0xd): undefined reference to `absl::otel_v1::variant_internal::ThrowBadVariantAccess()'
../../third_party/install/linux-x86_64-gnu/lib64/libopentelemetry_resources.a(resource.cc.o): In function `std::string& absl::otel_v1::variant_internal::TypedThrowBadVariantAccess<std::string&>()':
resource.cc:(.text._ZN4absl7otel_v116variant_internal26TypedThrowBadVariantAccessIRSsEET_v[_ZN4absl7otel_v116variant_internal26TypedThrowBadVariantAccessIRSsEET_v]+0x5): undefined reference to `absl::otel_v1::variant_internal::ThrowBadVariantAccess()'
collect2: error: ld returned 1 exit status
gmake[2]: *** [bin/example_simple] Error 1
gmake[1]: *** [simple/CMakeFiles/example_simple.dir/all] Error 2
gmake: *** [all] Error 2

Additional context

There are two problem.

  1. The code # include "absl/types/variant.h" in api/include/opentelemetry/nostd/variant.h:50 always use local absl/types/variant.h .
  2. ThrowBadVariantAccess in core.cc:29 should be replaced by linking absl::bad_variant_access.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions