2016-03-29 14 views
1

Ich versuche, einen einfachen DICOM-Viewer mit VTK 7.1 und Qt 5.5.1 unter Ubuntu zu entwickeln, wenn ich versuche, das Projekt auf meinem Terminal oder mit Creator zu kompilieren mehrere undefined reference Fehler ins Spiel kommen ...Nicht definiertes Referenzproblem beim Versuch, eine DICOM-Datei mit Qt und VTK anzuzeigen

Ergebnis:

libDigitalImagingLib.so : undefined reference to 'vtkRenderingVolumeOpenGL2_AutoInit_Construct()' 
libDigitalImagingLib.so : undefined reference to 'vtkRenderingVolumeOpenGL2_AutoInit_Construct()' 
libDigitalImagingLib.so : undefined reference to 'vtkImageViewer2::New()' 

Der entsprechende Code für mein Projekt für diesen Fall wie folgt aussieht ...

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED (VERSION 2.8) 
PROJECT (DigitalImaging) 

FIND_PACKAGE (VTK) 
INCLUDE (${VTK_USE_FILE}) 

FIND_PACKAGE (Qt5Widgets) 

SET (DigitalImagingLib_src ${PROJECT_SOURCE_DIR}/mainwindow.cpp) 
SET (DigitalImagingLib_hdr ${PROJECT_SOURCE_DIR}/mainwindow.h) 
SET (DigitalImagingLib_ui ${PROJECT_SOURCE_DIR}/mainwindow.ui) 
SET (DigitalImagingBin_src ${PROJECT_SOURCE_DIR}/main.cxx) 

qt5_wrap_cpp(DigitalImagingLib_hdr_moc ${DigitalImagingLib_hdr}) 
qt5_wrap_ui(DigitalImagingLib_ui_moc ${DigitalImagingLib_ui}) 

include_directories (${PROJECT_SOURCE_DIR}) 
include_directories (${PROJECT_BINARY_DIR}) 

add_library (DigitalImagingLib SHARED 
    ${DigitalImagingLib_src} 
    ${DigitalImagingLib_hdr_moc} 
    ${DigitalImagingLib_ui_moc} 
) 

target_link_libraries (DigitalImagingLib Qt5::Widgets) 

ADD_EXECUTABLE(DigitalImaging 
    ${DigitalImagingBin_src} 
) 

TARGET_LINK_LIBRARIES (DigitalImaging 
    ${VTK_LIBRARIES} 
    DigitalImagingLib 
) 

mainwindow.cpp:

# include "mainwindow.h" 
# include "ui_mainwindow.h" 

# include <vtkSmartPointer.h> 
# include <vtkImageViewer2.h> 
# include <vtkDICOMImageReader.h> 
# include <vtkRenderWindow.h> 
# include <vtkRenderWindowInteractor.h> 
# include <vtkRenderer.h> 
# include <QVTKWidget.h> 

... 

void MainWindow::displayDICOM(std::string file) { 
    vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New(); 
    reader -> SetFileName(file.c_str()); 
    reader -> Update(); 

    vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New(); 
    imageViewer -> SetInputConnection(reader -> GetOutputPort()); 
    imageViewer -> SetRenderWindow(ui -> vtkRenderer -> GetRenderWindow()); 
    imageViewer -> Render(); 
} 

... 

Als Anfänger würde wirklich jede Art von Hilfe und Tipps zur besten Codierpraktiken für CMake schätzen! Vielleicht ist es erwähnenswert, habe ich versucht, die folgenden ohne bemerkenswerten Erfolg zu implementieren (Es scheint, das gleiche zu tun) ...

# include "vtkAutoInit.h" 

VTK_MODULE_INIT(vtkRenderingOpenGL2) 
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2) 

Antwort

1

Es scheint, dass Sie in Ihrem DigitalImagingLib Hinzufügen VTK Bibliotheken verpasst, da der Fehler mit libDigitalImagingLib kommt .so

target_link_libraries (DigitalImagingLib Qt5::Widgets ${VTK_LIBRARIES}) 
+0

Ich schätze wirklich Ihren Vorschlag, als ich meine CMakeLists.txt erneut besuchte, fand ich ein paar Extras und fehlende Features :) – Nimzaj

Verwandte Themen