opentelemetry-cpp: undefined reference to `opentelemetry::v1::sdk::common

Hi Everyone,

A few days ago I’m trying to compile a simple hello world application(cpp), after the saga of the compilation of opentelemetry cpp SDK, I’m having the following error when running make:

/usr/bin/ld: /opt/otelcpp/lib/libopentelemetry_trace.a(random_id_generator.cc.o): in function opentelemetry::v1::sdk::trace::RandomIdGenerator::GenerateSpanId()': random_id_generator.cc:(.text+0x41): undefined reference to opentelemetry::v1::sdk::common::Random::GenerateRandomBuffer(opentelemetry::v1::nostd::span<unsigned char, 18446744073709551615ul>)’ /usr/bin/ld: /opt/otelcpp/lib/libopentelemetry_trace.a(random_id_generator.cc.o): in function opentelemetry::v1::sdk::trace::RandomIdGenerator::GenerateTraceId()': random_id_generator.cc:(.text+0xc7): undefined reference to opentelemetry::v1::sdk::common::Random::GenerateRandomBuffer(opentelemetry::v1::nostd::span<unsigned char, 18446744073709551615ul>)’ /usr/bin/ld: /opt/otelcpp/lib/libopentelemetry_exporter_jaeger_trace.a(THttpTransport.cc.o): in function opentelemetry::v1::exporter::jaeger::THttpTransport::THttpTransport(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::multimap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, opentelemetry::v1::ext::http::client::cmp_ic, std::allocator<std::pair<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> > > > >)': THttpTransport.cc:(.text+0xb6): undefined reference to opentelemetry::v1::ext::http::client::HttpClientFactory::CreateSync()’ collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/hello-otel.dir/build.make:113: hello-otel] Error 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hello-otel.dir/all] Error 2 make: *** [Makefile:91: all] Error 2

My CMakeList.txt:

cmake_minimum_required(VERSION 3.23) project(otel-test)

find_package(Protobuf REQUIRED) find_package(nlohmann_json REQUIRED) find_package(CURL REQUIRED) find_package(gRPC REQUIRED) find_package(Thrift REQUIRED) find_package(absl REQUIRED) find_package(opentelemetry-cpp CONFIG REQUIRED)

message(STATUS “otel c++ include dirs: ${OPENTELEMETRY_CPP_INCLUDE_DIRS}”) message(STATUS “otel c++ libs: ${OPENTELEMETRY_CPP_LIBRARIES}”) message(STATUS “thrift libs: ${THRIFT_FOUND_LIB}”)

add_library(libopentelemetry_common STATIC IMPORTED) add_library(libopentelemetry_resources STATIC IMPORTED) add_library(libopentelemetry_trace STATIC IMPORTED) add_library(libopentelemetry_version STATIC IMPORTED) add_library(libopentelemetry_metrics STATIC IMPORTED) add_library(libopentelemetry_http_client_curl STATIC IMPORTED) add_library(lib_client_nosend STATIC IMPORTED) add_library(libopentelemetry_otlp_recordable STATIC IMPORTED) add_library(libopentelemetry_exporter_otlp_grpc_log STATIC IMPORTED) add_library(libopentelemetry_exporter_otlp_http_client STATIC IMPORTED) add_library(libopentelemetry_exporter_otlp_http STATIC IMPORTED) add_library(libopentelemetry_exporter_otlp_grpc STATIC IMPORTED) add_library(libopentelemetry_exporter_ostream_span STATIC IMPORTED) add_library(libopentelemetry_exporter_jaeger_trace STATIC IMPORTED) add_library(libt STATIC IMPORTED)

set_target_properties(libt PROPERTIES IMPORTED_LOCATION “/usr/local/lib/libthrift.a” ) set_target_properties(libopentelemetry_common PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_common.a” ) set_target_properties(libopentelemetry_resources PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_resources.a” ) set_target_properties(libopentelemetry_trace PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_trace.a” ) set_target_properties(libopentelemetry_version PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_version.a” ) set_target_properties(libopentelemetry_metrics PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_metrics.a” ) set_target_properties(libopentelemetry_http_client_curl PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_http_client_curl.a” ) set_target_properties(lib_client_nosend PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libhttp_client_nosend.a” ) set_target_properties(libopentelemetry_http_client_curl PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_http_client_curl.a” ) set_target_properties(lib_client_nosend PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libhttp_client_nosend.a” ) set_target_properties(libopentelemetry_otlp_recordable PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_otlp_recordable.a” ) set_target_properties(libopentelemetry_exporter_otlp_grpc_log PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_otlp_grpc_log.a” ) set_target_properties(libopentelemetry_exporter_otlp_http_client PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_otlp_http_client.a” ) set_target_properties(libopentelemetry_exporter_otlp_http PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_otlp_http.a” )

set_target_properties(libopentelemetry_exporter_otlp_grpc PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_otlp_grpc.a” ) set_target_properties(libopentelemetry_exporter_ostream_span PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_ostream_span.a” ) set_target_properties(libopentelemetry_exporter_jaeger_trace PROPERTIES IMPORTED_LOCATION “/opt/otelcpp/lib/libopentelemetry_exporter_jaeger_trace.a” )

add_executable(hello-otel main.cpp) target_include_directories(hello-otel PRIVATE ${OPENTELEMETRY_CPP_INCLUDE_DIRS}) target_link_libraries(hello-otel libopentelemetry_common libopentelemetry_resources libopentelemetry_trace libopentelemetry_version libopentelemetry_metrics libopentelemetry_http_client_curl lib_client_nosend libopentelemetry_otlp_recordable libopentelemetry_exporter_otlp_grpc_log libopentelemetry_exporter_otlp_grpc_log libopentelemetry_exporter_otlp_http_client libopentelemetry_exporter_otlp_http libopentelemetry_exporter_otlp_grpc libopentelemetry_exporter_ostream_span libopentelemetry_exporter_jaeger_trace libt)

Command to build:

cmake -DCMAKE_PREFIX_PATH=/opt/otelcpp/ …

Output of command to build:

cmake -DCMAKE_PREFIX_PATH=/opt/otelcpp/ … – The C compiler identification is GNU 9.4.0 – The CXX compiler identification is GNU 9.4.0 – Detecting C compiler ABI info – Detecting C compiler ABI info - done – Check for working C compiler: /usr/bin/cc - skipped – Detecting C compile features – Detecting C compile features - done – Detecting CXX compiler ABI info – Detecting CXX compiler ABI info - done – Check for working CXX compiler: /usr/bin/c++ - skipped – Detecting CXX compile features – Detecting CXX compile features - done – Found Protobuf: /usr/local/lib/libprotobuf.so;-lpthread (found version “3.19.2”) – Found nlohmann_json: /opt/otelcpp/lib/cmake/nlohmann_json/nlohmann_jsonConfig.cmake (found version “3.9.1”) – Found CURL: /opt/vcpkg/installed/x64-linux/share/curl/CURLConfig.cmake (found version “7.82.0-DEV”)
– Found Threads: TRUE
– Found thrift: /root/source/opentelemetry-cpp/tools/vcpkg – Found opentelemetry-cpp: /opt/otelcpp/include
– otel c++ include dirs: /opt/otelcpp/include – otel c++ libs: opentelemetry-cpp::api;opentelemetry-cpp::sdk;opentelemetry-cpp::ext;opentelemetry-cpp::version;opentelemetry-cpp::common;opentelemetry-cpp::trace;opentelemetry-cpp::metrics;opentelemetry-cpp::in_memory_span_exporter;opentelemetry-cpp::otlp_recordable;opentelemetry-cpp::otlp_grpc_exporter;opentelemetry-cpp::otlp_http_client;opentelemetry-cpp::otlp_http_exporter;opentelemetry-cpp::ostream_span_exporter;opentelemetry-cpp::jaeger_trace_exporter;opentelemetry-cpp::http_client_curl – thrift libs: – Configuring done – Generating done – Build files have been written to: /opt/helloworld/build

Thank you in advance 😃

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 19 (13 by maintainers)

Most upvoted comments

Hello @owent !! Finally compiled the code and generated the executeable without errors or warnings, super thank you, I have no words that can express my gratitude,

You should not create imported target yourself, please use target_link_libraries(hello-otel opentelemetry-cpp::ostream_span_exporter opentelemetry-cpp::jaeger_trace_exporter opentelemetry-cpp::otlp_grpc_exporter opentelemetry-cpp::otlp_grpc_log_exporter opentelemetry-cpp::otlp_http_exporter opentelemetry-cpp::sdk opentelemetry-cpp::logs opentelemetry-cpp::metrics opentelemetry-cpp::sdk) instead.