I tried the "Getting Started" c++ at https://opentelemetry.io/docs/languages/cpp/getting-started/. In the section where otel is introduced to the example (https://opentelemetry.io/docs/languages/cpp/getting-started/#instrumentation), I get a linker error. oatpp and opentelemetry-cpp build just fine. I double checked if the file structure is as described in the guide.
Here is the full output from my build attempt:
fweissig@LINCX4YST3:~/Source/otel-cpp-starter/roll-dice/build$ cmake ..
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.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 opentelemetry libraries
-- Configuring done
-- Generating done
-- Build files have been written to: /home/fweissig/Source/otel-cpp-starter/roll-dice/build
foo@bar:~/Source/otel-cpp-starter/roll-dice/build$ cmake --build .
[ 50%] Building CXX object CMakeFiles/dice-server.dir/main.cpp.o
In file included from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/base/Countable.hpp:29,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/data/mapping/type/./Type.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/data/mapping/type/Primitive.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/data/share/./MemoryLabel.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/data/share/LazyStringMap.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/data/stream/Stream.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/network/tcp/Connection.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/protocol/http/Http.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/protocol/http/outgoing/Body.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/protocol/http/outgoing/./Response.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/protocol/http/outgoing/ResponseFactory.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/server/././HttpRequestHandler.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/server/./HttpRouter.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/server/HttpProcessor.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/web/server/HttpConnectionHandler.hpp:28,
from /home/fweissig/Source/otel-cpp-starter/roll-dice/main.cpp:46:
/home/fweissig/Source/otel-cpp-starter/roll-dice/main.cpp: In function ‘void run()’:
/home/fweissig/Source/otel-cpp-starter/roll-dice/main.cpp:103:29: warning: format ‘%s’ expects argument of type ‘char*’, but argument 4 has type ‘const void*’ [-Wformat=]
103 | OATPP_LOGI("Dice Server", "Server running on port %s", connectionProvider->getProperty("port").getData());
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| const void*
/home/fweissig/Source/otel-cpp-starter/roll-dice/../oatpp/src/oatpp/core/base/./Environment.hpp:568:80: note: in definition of macro ‘OATPP_LOGI’
568 | oatpp::base::Environment::logFormatted(oatpp::base::Logger::PRIORITY_I, TAG, __VA_ARGS__);
| ^~~~~~~~~~~
/home/fweissig/Source/otel-cpp-starter/roll-dice/main.cpp:103:54: note: format string is defined here
103 | OATPP_LOGI("Dice Server", "Server running on port %s", connectionProvider->getProperty("port").getData());
| ~^
| |
| char*
| %p
[100%] Linking CXX executable dice-server
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/trace/libopentelemetry_trace.a(tracer_provider.cc.o): in function `opentelemetry::v1::sdk::common::internal_log::GlobalLogHandler::GetLogHandler()':
tracer_provider.cc:(.text._ZN13opentelemetry2v13sdk6common12internal_log16GlobalLogHandler13GetLogHandlerEv[_ZN13opentelemetry2v13sdk6common12internal_log16GlobalLogHandler13GetLogHandlerEv]+0x9): undefined reference to `opentelemetry::v1::sdk::common::internal_log::GlobalLogHandler::GetHandlerAndLevel()'
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/trace/libopentelemetry_trace.a(tracer_provider.cc.o): in function `opentelemetry::v1::sdk::common::internal_log::GlobalLogHandler::GetLogLevel()':
tracer_provider.cc:(.text._ZN13opentelemetry2v13sdk6common12internal_log16GlobalLogHandler11GetLogLevelEv[_ZN13opentelemetry2v13sdk6common12internal_log16GlobalLogHandler11GetLogLevelEv]+0x9): undefined reference to `opentelemetry::v1::sdk::common::internal_log::GlobalLogHandler::GetHandlerAndLevel()'
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/trace/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: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/trace/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: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/exporters/ostream/libopentelemetry_exporter_ostream_span.a(span_exporter.cc.o): in function `opentelemetry::v1::exporter::trace::OStreamSpanExporter::OStreamSpanExporter(std::ostream&)':
span_exporter.cc:(.text+0x19a): undefined reference to `opentelemetry::v1::sdk::trace::SpanExporter::SpanExporter()'
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/exporters/ostream/libopentelemetry_exporter_ostream_span.a(span_exporter.cc.o): in function `opentelemetry::v1::exporter::trace::OStreamSpanExporter::~OStreamSpanExporter()':
span_exporter.cc:(.text._ZN13opentelemetry2v18exporter5trace19OStreamSpanExporterD2Ev[_ZN13opentelemetry2v18exporter5trace19OStreamSpanExporterD5Ev]+0x36): undefined reference to `opentelemetry::v1::sdk::trace::SpanExporter::~SpanExporter()'
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/exporters/ostream/libopentelemetry_exporter_ostream_span.a(span_exporter.cc.o):(.data.rel.ro._ZTIN13opentelemetry2v18exporter5trace19OStreamSpanExporterE[_ZTIN13opentelemetry2v18exporter5trace19OStreamSpanExporterE]+0x10): undefined reference to `typeinfo for opentelemetry::v1::sdk::trace::SpanExporter'
/usr/bin/ld: /home/fweissig/Source/otel-cpp-starter/opentelemetry-cpp/build/sdk/src/resource/libopentelemetry_resources.a(resource_detector.cc.o): in function `opentelemetry::v1::sdk::resource::OTELResourceDetector::Detect()':
resource_detector.cc:(.text+0x5f): undefined reference to `opentelemetry::v1::sdk::common::GetStringEnvironmentVariable(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
/usr/bin/ld: resource_detector.cc:(.text+0x7e): undefined reference to `opentelemetry::v1::sdk::common::GetStringEnvironmentVariable(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/dice-server.dir/build.make:102: dice-server] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/dice-server.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2
I already tried to modify the Makefile with no success. Maybe there is something missing in the build libraries?