尝试制作 ITK 示例时出现链接器错误 Registration9.cxx

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

所以我正在尝试构建 Affine Registration Filter 这是 ITK 提供的示例。

文件生成,但我收到一个 linker 错误,提示梯度步长优化器正在引用未定义的基本模板。我查看了相应的ITK目录,基础模板文件就在那里。此外,当使用原始梯度步长优化器(不是 v4)时,文件将 link。库中有错误(可能不太可能)或我的系统上的某些东西正在抛出 linking。

目前使用 cmake 3.11、Slicer 4 和 ITK 4.13。我通过向导创建了一个新的 Slicer 扩展,并向其中添加了一个 cli 模块作为测试台,如果有人想尝试并准确地重现错误的话。

 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

您的 list of components 中可能缺少 ITKOptimizersv4。