Skip to content

undefined reference to `opentelemetry::v1::sdk::common #1359

@ccoqueiro

Description

@ccoqueiro

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 :-)

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedGood for taking. Extra help will be provided by maintainers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions