哪些库应该链接到这个 VTK 示例?

Which libraries should be linked to this VTK example?

我想在vtk中编译this示例,其中包括以下包含文件:

#include <vtkSmartPointer.h>
#include <vtkObjectFactory.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkActor.h>
// headers needed for this example
#include <vtkImageViewer2.h>
#include <vtkDICOMImageReader.h>
#include <vtkInteractorStyleImage.h>
#include <vtkActor2D.h>
#include <vtkTextProperty.h>
#include <vtkTextMapper.h>
// needed to easily convert int to std::string
#include <sstream>

最初应该使用 CMakeLists.txt 文件编译,该文件如下所示:

cmake_minimum_required(VERSION 2.8)

PROJECT(ReadDICOMSeries)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(ReadDICOMSeries MACOSX_BUNDLE ReadDICOMSeries)

if(VTK_LIBRARIES)
  target_link_libraries(ReadDICOMSeries ${VTK_LIBRARIES})
else()
  target_link_libraries(ReadDICOMSeries vtkHybrid vtkWidgets)
endif()

问题是:当我简单地复制这段代码并编译它时,我得到了很多引用错误(例如:Undefined reference to 'vtkDICOMImageReader::SetDirectoryName(char const*)')。这让我假设我应该 link 一些库。不幸的是,CMakeLists 文件没有告诉我哪些库。我如何找到它?

强烈建议使用 Cmake 来编译 VTK 和相关项目,尤其是作为初学者。我只使用 CMake,但我通过检查已构建项目的属性了解了幕后发生的事情。在您提供的示例中,CMake 文件仅使用 "target_link_libraries(ReadDICOMSeries ${VTK_LIBRARIES}" ,据我所知,它向链接器提供了所有使用 vtk 构建的库。

要查看 CMake 将使用该指令加载什么,请检查 vtk 构建目录中的文件 "VTKConfig.cmake"。 如果手动的话,还得包含很多目录

我设法在不直接使用 CMake 或不必深入研究每个单独的库的情况下解决了这个问题。

  1. 找到一个头文件或 C/CPP 文件来定义给您链接器带来痛苦的对象。
  2. 在文件中查找 VTK 附带的 *.cmake 文件,搜索该文件名。所以在你的情况下,寻找 vtkDICOMImageReader
  3. 我在 vtkIOKit.cmake 中找到了 vtkDICOMImageReader,所以一个不错的猜测可能是 libvtkio。

在我的例子中,我正在寻找 vtkDataSetAttributes,这个方法成功地确定它在 vtkFiltering.lib 中。

如果您已经设置了 Cmake,那么正确地设置它可能会更容易,但我不希望 "set up vtk" 变成 "set up cmake so I can set up vtk",然后变成 "set up some other thing so I can set up cmake so I can set up vtk"。