diff --git a/include/ceres/dynamic_cost_function_to_functor.h b/include/ceres/dynamic_cost_function_to_functor.h
index bc2fd3b..9226cf4 100644
--- a/include/ceres/dynamic_cost_function_to_functor.h
+++ b/include/ceres/dynamic_cost_function_to_functor.h
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2023 Google Inc. All rights reserved.
+// Copyright 2025 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -105,20 +105,13 @@
 class CERES_EXPORT DynamicCostFunctionToFunctor {
  public:
   // Takes ownership of cost_function.
-  explicit DynamicCostFunctionToFunctor(CostFunction* cost_function)
-      : DynamicCostFunctionToFunctor{
-            std::unique_ptr<CostFunction>{cost_function}} {}
+  explicit DynamicCostFunctionToFunctor(CostFunction* cost_function);
 
   // Takes ownership of cost_function.
   explicit DynamicCostFunctionToFunctor(
-      std::unique_ptr<CostFunction> cost_function)
-      : cost_function_(std::move(cost_function)) {
-    CHECK(cost_function_ != nullptr);
-  }
+      std::unique_ptr<CostFunction> cost_function);
 
-  bool operator()(double const* const* parameters, double* residuals) const {
-    return cost_function_->Evaluate(parameters, residuals, nullptr);
-  }
+  bool operator()(double const* const* parameters, double* residuals) const;
 
   template <typename JetT>
   bool operator()(JetT const* const* inputs, JetT* output) const {
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 1355a38..c409eef 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -1,5 +1,5 @@
 # Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2022 Google Inc. All rights reserved.
+# Copyright 2024 Google Inc. All rights reserved.
 # http://ceres-solver.org/
 #
 # Redistribution and use in source and binary forms, with or without
@@ -179,6 +179,7 @@
     dogleg_strategy.cc
     dynamic_compressed_row_jacobian_writer.cc
     dynamic_compressed_row_sparse_matrix.cc
+    dynamic_cost_function_to_functor.cc
     dynamic_sparse_normal_cholesky_solver.cc
     eigensparse.cc
     evaluation_callback.cc
diff --git a/internal/ceres/dynamic_cost_function_to_functor.cc b/internal/ceres/dynamic_cost_function_to_functor.cc
new file mode 100644
index 0000000..42e8fac
--- /dev/null
+++ b/internal/ceres/dynamic_cost_function_to_functor.cc
@@ -0,0 +1,54 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2025 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+//   this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+//   this list of conditions and the following disclaimer in the documentation
+//   and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+//   used to endorse or promote products derived from this software without
+//   specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+//         dgossow@google.com (David Gossow)
+
+#include "ceres/dynamic_cost_function_to_functor.h"
+
+#include <memory>
+
+namespace ceres {
+
+DynamicCostFunctionToFunctor::DynamicCostFunctionToFunctor(
+    CostFunction* cost_function)
+    : DynamicCostFunctionToFunctor{
+          std::unique_ptr<CostFunction>{cost_function}} {}
+
+DynamicCostFunctionToFunctor::DynamicCostFunctionToFunctor(
+    std::unique_ptr<CostFunction> cost_function)
+    : cost_function_(std::move(cost_function)) {
+  CHECK(cost_function_ != nullptr);
+}
+
+bool DynamicCostFunctionToFunctor::operator()(double const* const* parameters,
+                                              double* residuals) const {
+  return cost_function_->Evaluate(parameters, residuals, nullptr);
+}
+
+}  // namespace ceres
