2016-03-29 18 views
1

Projemi terminalimde veya Creator'da derlemeye çalışırken, Ubuntu altında VTK 7.1 ve Qt 5.5.1 kullanarak basit bir DICOM görüntüleyicisi geliştirmeye çalışıyorum. birkaç tanımsız başvuru hataları ... devreye giriyorQt ve VTK kullanarak bir DICOM dosyasını görüntülemeye çalışırken tanımlanmamış referans sorunu

Sonuç:

Bu durumda benim proje için ilgili kod şuna benzer
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: CMake en iyi kodlama uygulamaları konusunda herhangi yardım türünü ve ipuçları takdir gerçekten edecek bir acemi olarak

# 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(); 
} 

... 

! Belki de herhangi bir kayda değer başarı olmadan aşağıdakileri uygulamaya çalışmıştır söz etmek gerekiyor

# include "vtkAutoInit.h" 

VTK_MODULE_INIT(vtkRenderingOpenGL2) 
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2) 

cevap

1

hata libDigitalImagingLib ile gelir, çünkü sizin DigitalImagingLib içinde VTK kütüphaneleri ekleyerek cevapsız görünüyor ... (O aynı şeyi görünüyor) .so

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

CMakeLists.txt dosyasını yeniden ziyaret ettikten sonra önerinizi ve eksik özniteliklerini buldum :) önerinizi gerçekten takdir ediyorum :) – Nimzaj

İlgili konular