Search code examples
itk

Getting a linker error when attempting to make ITK example Registration9.cxx


So I'm trying to build the Affine Registration Filter which is an example offered by ITK.

The file builds, but I get a linker error which is saying that the gradient step optimizer is referencing an undefined base template. I checked in the corresponding ITK directory and the base template file is there. Also, when using the original gradient step optimizer (not v4) the file will link. There's either an error in the library (probably unlikely) or something on my system is throwing off linking.

Currently using cmake 3.11, Slicer 4 and ITK 4.13. I created a new Slicer extension through the wizard and added a cli module to it as a test bed if anyone wants to try and reproduce the error exactly.

 Linking CXX shared library ../lib/Slicer-4.8/cli/modules/libImageRegistration9Lib.dylib
Undefined symbols for architecture x86_64:
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetWeights(itk::OptimizerParameters<double>)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::StartOptimization(bool)", referenced from:
      itk::GradientDescentOptimizerBasev4Template<double>::StartOptimization(bool) in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::DoEstimateScalesOn()", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetNumberOfThreads(unsigned int)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetScalesEstimator(itk::OptimizerParameterScalesEstimatorTemplate<double>*)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::DoEstimateScalesOff()", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetModifiableMetric()", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetDoEstimateScales(bool)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetMetric()", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetMetric(itk::ObjectToObjectMetricBaseTemplate<double>*)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::SetScales(itk::OptimizerParameters<double> const&)", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::ObjectToObjectOptimizerBaseTemplate()", referenced from:
      itk::GradientDescentOptimizerBasev4Template<double>::GradientDescentOptimizerBasev4Template() in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::~ObjectToObjectOptimizerBaseTemplate()", referenced from:
      itk::GradientDescentOptimizerBasev4Template<double>::GradientDescentOptimizerBasev4Template() in ImageRegistration9.cxx.o
      itk::GradientDescentOptimizerBasev4Template<double>::~GradientDescentOptimizerBasev4Template() in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetWeights() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetCurrentPosition() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetNumberOfThreads() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetDoEstimateScales() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetScalesAreIdentity() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetCurrentMetricValue() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetWeightsAreIdentity() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetValue() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetMetric() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::GetScales() const", referenced from:
      vtable for itk::RegularStepGradientDescentOptimizerv4<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerv4Template<double> in ImageRegistration9.cxx.o
      vtable for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
  "itk::ObjectToObjectOptimizerBaseTemplate<double>::PrintSelf(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, itk::Indent) const", referenced from:
      itk::GradientDescentOptimizerBasev4Template<double>::PrintSelf(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, itk::Indent) const in ImageRegistration9.cxx.o
  "typeinfo for itk::ObjectToObjectOptimizerBaseTemplate<double>", referenced from:
      typeinfo for itk::GradientDescentOptimizerBasev4Template<double> in ImageRegistration9.cxx.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/Slicer-4.8/cli-modules/libImageRegistration9Lib.dylib] Error 1
make[1]: *** [ImageRegistration9/CMakeFiles/ImageRegistration9Lib.dir/all] Error 2

Solution

  • You might be missing ITKOptimizersv4 in your list of components.