2016-03-29 6 views
1

Я пытаюсь создать простой просмотрщик 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) 

ответ

1

Кажется, что вы пропустили добавление библиотеки ВТК в вашем DigitalImagingLib, так как ошибка приходит с libDigitalImagingLib .so

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

Я очень ценю ваше предложение, пересматривая свой CMakeLists.txt. Я нашел пару дополнительных и отсутствующих функций :) – Nimzaj

 Смежные вопросы

  • Нет связанных вопросов^_^