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)
Ich schätze wirklich Ihren Vorschlag, als ich meine CMakeLists.txt erneut besuchte, fand ich ein paar Extras und fehlende Features :) – Nimzaj