【问题标题】:Which libraries should be linked to this VTK example?哪些库应该链接到这个 VTK 示例?
【发布时间】:2015-04-04 15:36:11
【问题描述】:

我想在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-file 编译,如下所示:

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 文件没有告诉我哪些库。我怎样才能知道呢?

【问题讨论】:

  • 运行 CMake 时,VTK 安装路径是否正确?
  • 是的,一切都很好。
  • 只有这个例子有问题,而其他工作正常吗?如果你已经编译成功 vtk,并且使用 CMake 设置项目,那么要包含的库已经由 cmake 管理(感谢 include(${VTK_USE_FILE}), ${VTK_LIBRARIES})。您是否可能在发布模式下编译了 VTK,并尝试在调试中编译示例,或者相反?
  • 问题是我不想使用 CMake,我想使用 g++ 并通过 -l 添加库。但我不知道我必须添加哪些库。

标签: c++ vtk


【解决方案1】:

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

要查看 CMake 将使用该指令加载什么,请检查 vtk 构建目录中的文件“VTKConfig.cmake”。 如果您手动执行,您还必须包含很多目录

【讨论】:

    【解决方案2】:

    我设法解决了这个问题,而无需直接使用 CMake,也不必深入研究每个单独的库。

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

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

    如果您已经设置了 Cmake,那么正确执行可能会更容易,但我不希望“设置 vtk”变成“设置 cmake,以便我可以设置 vtk”,然后变成“设置”做一些其他的事情,这样我就可以设置 cmake,这样我就可以设置 vtk"。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2011-01-25
      • 1970-01-01
      • 2022-06-14
      • 2020-09-13
      • 2023-03-09
      相关资源
      最近更新 更多