应该将哪些库链接到此VTK示例?

时间:2015-04-04 15:36:12

标签: c++ vtk

我想在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*)')。这导致我假设我应该将一些库链接到它。不幸的是,CMakeLists文件并没有告诉我哪些库。我该如何找到它?

2 个答案:

答案 0 :(得分:1)

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

要查看CMake将使用该指令加载什么,请检查文件&#34; VTKConfig.cmake&#34;在vtk构建目录中。 如果你手动完成,你还必须包含很多目录

答案 1 :(得分:1)

我设法在没有直接使用CMake或不得不深入挖掘每个lib的情况下解决这个问题。

  1. 找到一个头文件或C / CPP文件,用于定义让链接器痛苦的对象。
  2. 执行VTK附带的* .cmake文件的查找文件,搜索该文件名。因此,在您的情况下,请查找vtkDICOMImageReader
  3. 我在vtkIOKit.cmake中找到了vtkDICOMImageReader,所以一个不错的猜测可能是libvtkio。
  4. 在我的情况下,我正在寻找vtkDataSetAttributes,这个方法成功地确定它在vtkFiltering.lib中。

    如果您已经设置了Cmake,那么正确地执行它可能会更容易,但我不想“设置vtk”变成“设置cmake所以我可以设置vtk”然后进入“设置另外一些事情,所以我可以设置cmake所以我可以设置vtk“。