2015-04-04 58 views
0

我想編譯VTK,其中包括以下包含文件this例如:哪些庫應該鏈接到此VTK示例?

#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文件不告訴我哪個庫。我如何發現?

+0

當你運行CMake時,它的VTK安裝路徑是否正確? – lib 2015-04-06 15:08:48

+0

是的,一切都很好。 – 2015-04-06 17:40:33

+0

你只有在這個例子有問題,而其他工作正常嗎?如果你編譯成功了vtk,並使用CMake設置項目,那麼包含的庫已經由cmake管理(感謝include($ {VTK_USE_FILE}),$ {VTK_LIBRARIES})。你是否可能在發佈模式下編譯VTK,並嘗試在調試中編譯示例,或者反過來呢? – lib 2015-04-06 17:49:26

回答

0

強烈建議Cmake編譯VTK和相關項目,特別是作爲初學者。我只使用CMake,但通過檢查已經構建的項目的屬性,我瞭解了底層發生了什麼。在你提供的例子中,CMake文件只使用「target_link_libraries(ReadDICOMSeries $ {VTK_LIBRARIES}」,據我所知,它提供給鏈接器ALL使用vtk構建的庫。

查看CMake將加載的內容使用該指令,在vtk build目錄中檢查文件「VTKConfig.cmake」 如果你手動完成,你還需要包含很多目錄

1

我設法弄清楚了這一點,而不直接使用CMake或必須挖掘到每個單獨的庫。

  1. 找到頭文件或定義obj的C/CPP文件這是給你鏈接器的痛苦。
  2. 執行VTK附帶的* .cmake文件的查找文件,搜索該文件名。所以在你的情況下,尋找vtkDICOMImageReader
  3. 我在vtkIOKit.cmake中發現了vtkDICOMImageReader,所以一個不錯的猜測可能是libvtkio。

在我的情況下,我正在尋找vtkDataSetAttributes,並且此方法成功確定它在vtkFiltering.lib中。

如果你已經設置了Cmake,那麼正確地做它可能會更容易,但我不希望「設置vtk」變成「設置cmake,所以我可以設置vtk」,然後進入「設置一些其他的東西,所以我可以設置cmake,所以我可以設置vtk「。

相關問題