--- ./api/include/opentelemetry/trace/provider.h_orig 2026-06-02 09:14:51.243602744 -0500 +++ ./api/include/opentelemetry/trace/provider.h 2026-06-02 09:14:51.333765996 -0500 @@ -27,34 +27,18 @@ * By default, a no-op TracerProvider is returned. This will never return a * nullptr TracerProvider. */ - static nostd::shared_ptr GetTracerProvider() noexcept - { - std::lock_guard guard(GetLock()); - return nostd::shared_ptr(GetProvider()); - } + static nostd::shared_ptr GetTracerProvider() noexcept; /** * Changes the singleton TracerProvider. */ - static void SetTracerProvider(const nostd::shared_ptr &tp) noexcept - { - std::lock_guard guard(GetLock()); - GetProvider() = tp; - } + static void SetTracerProvider(const nostd::shared_ptr &tp) noexcept; private: - OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr &GetProvider() noexcept - { - static nostd::shared_ptr provider(new NoopTracerProvider); - return provider; - } - - OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept - { - static common::SpinLockMutex lock; - return lock; - } + static nostd::shared_ptr &GetProvider() noexcept; + static common::SpinLockMutex &GetLock() noexcept; }; } // namespace trace OPENTELEMETRY_END_NAMESPACE + --- ./api/test/trace/CMakeLists.txt_orig 2026-06-02 09:14:51.704480244 -0500 +++ ./api/test/trace/CMakeLists.txt 2026-06-02 09:14:51.879757992 -0500 @@ -17,7 +17,7 @@ tracer_test) add_executable(api_${testname} "${testname}.cc") target_link_libraries(api_${testname} ${GTEST_BOTH_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api) + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api opentelemetry_trace) gtest_add_tests( TARGET api_${testname} TEST_PREFIX trace. --- ./examples/common/foo_library/CMakeLists.txt_orig 2026-06-02 09:14:55.230838572 -0500 +++ ./examples/common/foo_library/CMakeLists.txt 2026-06-02 09:14:55.250872647 -0500 @@ -10,4 +10,6 @@ target_include_directories(common_foo_library PUBLIC "$") -target_link_libraries(common_foo_library PUBLIC opentelemetry-cpp::api) +target_link_libraries(common_foo_library PUBLIC opentelemetry-cpp::api opentelemetry-cpp::trace) + + --- ./examples/common/logs_foo_library/CMakeLists.txt_orig 2026-06-02 09:14:55.270906191 -0500 +++ ./examples/common/logs_foo_library/CMakeLists.txt 2026-06-02 09:14:55.290937208 -0500 @@ -11,7 +11,7 @@ target_include_directories(common_logs_foo_library PUBLIC $) -target_link_libraries(common_logs_foo_library PUBLIC opentelemetry-cpp::api) +target_link_libraries(common_logs_foo_library PUBLIC opentelemetry-cpp::api opentelemetry-cpp::trace) # Internal deprecated API calling should not failed the build in maintainer mode if(OTELCPP_MAINTAINER_MODE) --- ./api/test/singleton/CMakeLists.txt_orig 2026-06-13 00:59:28.458346411 -0500 +++ ./api/test/singleton/CMakeLists.txt 2026-06-13 01:01:32.658612664 -0500 @@ -4,34 +4,34 @@ include(GoogleTest) add_library(component_a STATIC component_a.cc) -target_link_libraries(component_a opentelemetry_api) +target_link_libraries(component_a opentelemetry_api opentelemetry_trace) add_library(component_b STATIC component_b.cc) -target_link_libraries(component_b opentelemetry_api) +target_link_libraries(component_b opentelemetry_api opentelemetry_trace) add_library(component_c SHARED component_c.cc) set_target_properties(component_c PROPERTIES CXX_VISIBILITY_PRESET default) -target_link_libraries(component_c opentelemetry_api) +target_link_libraries(component_c opentelemetry_api opentelemetry_trace) add_library(component_d SHARED component_d.cc) set_target_properties(component_d PROPERTIES CXX_VISIBILITY_PRESET hidden) -target_link_libraries(component_d opentelemetry_api) +target_link_libraries(component_d opentelemetry_api opentelemetry_trace) add_library(component_e SHARED component_e.cc) set_target_properties(component_e PROPERTIES CXX_VISIBILITY_PRESET default) -target_link_libraries(component_e opentelemetry_api) +target_link_libraries(component_e opentelemetry_api opentelemetry_trace) add_library(component_f SHARED component_f.cc) set_target_properties(component_f PROPERTIES CXX_VISIBILITY_PRESET hidden) -target_link_libraries(component_f opentelemetry_api) +target_link_libraries(component_f opentelemetry_api opentelemetry_trace) add_library(component_g SHARED component_g.cc) set_target_properties(component_g PROPERTIES CXX_VISIBILITY_PRESET default) -target_link_libraries(component_g opentelemetry_api) +target_link_libraries(component_g opentelemetry_api opentelemetry_trace) add_library(component_h SHARED component_h.cc) set_target_properties(component_h PROPERTIES CXX_VISIBILITY_PRESET hidden) -target_link_libraries(component_h opentelemetry_api) +target_link_libraries(component_h opentelemetry_api opentelemetry_trace) add_executable(singleton_test singleton_test.cc) --- /dev/null 2026-06-02 09:15:00.241026419 -0500 +++ ./sdk/src/trace/CMakeLists.txt 2026-06-02 09:15:00.419756167 -0500 @@ -3,6 +3,7 @@ add_library( opentelemetry_trace + api_provider.cc tracer_context.cc tracer_context_factory.cc tracer_provider.cc --- /dev/null 2026-06-02 09:15:00.401315845 -0500 +++ ./sdk/src/trace/api_provider.cc 2026-06-02 09:15:00.401315845 -0500 @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/trace/provider.h" +#include "opentelemetry/trace/noop.h" + + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ + +nostd::shared_ptr Provider::GetTracerProvider() noexcept +{ + std::lock_guard guard(GetLock()); + return nostd::shared_ptr(GetProvider()); +} + +void Provider::SetTracerProvider(const nostd::shared_ptr &tp) noexcept +{ + std::lock_guard guard(GetLock()); + GetProvider() = tp; +} + +nostd::shared_ptr &Provider::GetProvider() noexcept +{ + static nostd::shared_ptr provider(new NoopTracerProvider); + return provider; +} + +common::SpinLockMutex &Provider::GetLock() noexcept +{ + static common::SpinLockMutex lock; + return lock; +} + +} // namespace trace +OPENTELEMETRY_END_NAMESPACE