--- ./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<TracerProvider> GetTracerProvider() noexcept
-  {
-    std::lock_guard<common::SpinLockMutex> guard(GetLock());
-    return nostd::shared_ptr<TracerProvider>(GetProvider());
-  }
+  static nostd::shared_ptr<TracerProvider> GetTracerProvider() noexcept;
 
   /**
    * Changes the singleton TracerProvider.
    */
-  static void SetTracerProvider(const nostd::shared_ptr<TracerProvider> &tp) noexcept
-  {
-    std::lock_guard<common::SpinLockMutex> guard(GetLock());
-    GetProvider() = tp;
-  }
+  static void SetTracerProvider(const nostd::shared_ptr<TracerProvider> &tp) noexcept;
 
 private:
-  OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr<TracerProvider> &GetProvider() noexcept
-  {
-    static nostd::shared_ptr<TracerProvider> provider(new NoopTracerProvider);
-    return provider;
-  }
-
-  OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept
-  {
-    static common::SpinLockMutex lock;
-    return lock;
-  }
+  static nostd::shared_ptr<TracerProvider> &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 "$<BUILD_INTERFACE:${EXAMPLES_COMMON_DIR}>")
-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 $<BUILD_INTERFACE:${EXAMPLES_COMMON_DIR}>)
 
-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<TracerProvider> Provider::GetTracerProvider() noexcept
+{
+  std::lock_guard<common::SpinLockMutex> guard(GetLock());
+  return nostd::shared_ptr<TracerProvider>(GetProvider());
+}
+
+void Provider::SetTracerProvider(const nostd::shared_ptr<TracerProvider> &tp) noexcept
+{
+  std::lock_guard<common::SpinLockMutex> guard(GetLock());
+  GetProvider() = tp;
+}
+
+nostd::shared_ptr<TracerProvider> &Provider::GetProvider() noexcept
+{
+  static nostd::shared_ptr<TracerProvider> provider(new NoopTracerProvider);
+  return provider;
+}
+
+common::SpinLockMutex &Provider::GetLock() noexcept
+{
+  static common::SpinLockMutex lock;
+  return lock;
+}
+
+}  // namespace trace
+OPENTELEMETRY_END_NAMESPACE
