Я пытаюсь создать простой просмотрщик DICOM с помощью VTK 7.1 и Qt 5.5.1 под Ubuntu, хотя при попытке скомпилировать проект на моем терминале или с помощью Creator несколько неопределенных ссылок на ошибках в игру вступают ...Неопределенная проблема с ссылкой при попытке отобразить файл DICOM с использованием Qt и VTK
Результат:
libDigitalImagingLib.so : undefined reference to 'vtkRenderingVolumeOpenGL2_AutoInit_Construct()'
libDigitalImagingLib.so : undefined reference to 'vtkRenderingVolumeOpenGL2_AutoInit_Construct()'
libDigitalImagingLib.so : undefined reference to 'vtkImageViewer2::New()'
Соответствующий код для моего проекта в этом случае выглядит следующим образом ...
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();
}
...
Как новичок действительно был бы признателен любую помощь и советы по наилучшей практике кодирования для CMake! Может быть, стоит упомянуть, я пытался реализовать следующее без каких-либо замечательных успехов (кажется, сделать то же самое) ...
# include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
Я очень ценю ваше предложение, пересматривая свой CMakeLists.txt. Я нашел пару дополнительных и отсутствующих функций :) – Nimzaj