我想在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文件并没有告诉我哪些库。我该如何找到它?
答案 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的情况下解决这个问题。
vtkDICOMImageReader
。 在我的情况下,我正在寻找vtkDataSetAttributes
,这个方法成功地确定它在vtkFiltering.lib中。
如果您已经设置了Cmake,那么正确地执行它可能会更容易,但我不想“设置vtk”变成“设置cmake所以我可以设置vtk”然后进入“设置另外一些事情,所以我可以设置cmake所以我可以设置vtk“。