Сборка libQVTK с помощью vtk 6.3 и qt5

Можно ли собрать библиотеку qvtk (и родственников) с qt5 и vtk 6.3 (или транковой версией)?

Я установил qt5 из установщика.run, все установилось нормально, затем я собрал vtk 6.3 из источников, включающих VTK_Group_Qt и корректно устанавливающих пути qt.

Кажется, что для QVTK не существует какой-либо конкретной опции или модуля (виджет VTK для qt), поэтому я предполагаю, что он создается с этой конфигурацией, но когда я пытаюсь скомпилировать некоторый исходный код, основанный на QVTK, я получаю ошибки:

/usr/bin/ld: cannot find -lvtkRendering
/usr/bin/ld: cannot find -lvtkGraphics
/usr/bin/ld: cannot find -lvtkHybrid
/usr/bin/ld: cannot find -lQVTK

Есть ли способ собрать эти библиотеки из магистрали VTK? Я не мог найти никаких указаний нигде.

2 ответа

Решение

Я долгое время боролся с этой проблемой, и оказалось, что это проблема с CMakeLists.txt проекта.

Я опубликую здесь неправильные и правильные версии для тех, кто борется с той же проблемой:

НЕПРАВИЛЬНО:

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

project      (pcl-visualizer)
find_package (Qt5Wodgets)
find_package (VTK REQUIRED)
find_package (PCL 1.8 REQUIRED)

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS})
add_definitions     (${PCL_DEFINITIONS})

set  (project_SOURCES main.cpp pclviewer.cpp)
set  (project_HEADERS pclviewer.h)
set  (project_FORMS   pclviewer.ui)
set  (VTK_LIBRARIES   vtkRendering vtkGraphics vtkHybrid QVTK)

QT5_WRAP_CPP (project_HEADERS_MOC   ${project_HEADERS})
QT5_WRAP_UI  (project_FORMS_HEADERS ${project_FORMS})

ADD_DEFINITIONS (${QT_DEFINITIONS})

ADD_EXECUTABLE  (pcl_visualizer ${project_SOURCES}
                                ${project_FORMS_HEADERS}
                                ${project_HEADERS_MOC})

TARGET_LINK_LIBRARIES (pcl_visualizer ${PCL_LIBRARIES} ${VTK_LIBRARIES} ${QT_LIBRARIES})

ПРАВИЛЬНЫЙ:

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

project      (pcl-visualizer)
find_package (Qt5 REQUIRED COMPONENTS Widgets Core)
find_package (VTK REQUIRED)
find_package (PCL 1.8 REQUIRED)

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS})
add_definitions     (${PCL_DEFINITIONS})

set  (project_SOURCES main.cpp pclviewer.cpp)
set  (project_HEADERS pclviewer.h)
set  (project_FORMS   pclviewer.ui)

QT5_WRAP_CPP (project_HEADERS_MOC   ${project_HEADERS})
QT5_WRAP_UI  (project_FORMS_HEADERS ${project_FORMS})

ADD_DEFINITIONS (${QT_DEFINITIONS})

ADD_EXECUTABLE  (pcl_visualizer ${project_SOURCES}
                                ${project_FORMS_HEADERS}
                                ${project_HEADERS_MOC})

TARGET_LINK_LIBRARIES (pcl_visualizer ${PCL_LIBRARIES})

qt5_use_modules (pcl_visualizer Widgets)

Я не уверен на 100% в причине проблемы, но я предполагаю, что libQVTK и тому подобное были заменены в qt5 модулем Qt5Widgets (интересно, к каким библиотекам это относится), что делает старые библиотеки недоступными и ненужными.

Вы можете посмотреть на это. В VTK "CMakeLists.txt":

IF (VTK_USE_QT AND VTK_USE_GUISUPPORT AND VTK_USE_RENDERING)
  SET (VTK_USE_QVTK ON CACHE INTERNAL "Build QVTK widget and plugin for Qt" FORCE)
ELSE (VTK_USE_QT AND VTK_USE_GUISUPPORT AND VTK_USE_RENDERING)
  SET (VTK_USE_QVTK OFF CACHE INTERNAL "Build QVTK widget and plugin for Qt" FORCE)
ENDIF (VTK_USE_QT AND VTK_USE_GUISUPPORT AND VTK_USE_RENDERING)

Так что вы должны включить VTK_USE_QT, VTK_USE_GUISUPPORT, а также VTK_USE_RENDERINGON при строительстве ВТК. (Последнее должно быть включено по умолчанию). Как говорится, в версии 5.10.1 "CMakeLists.txt" может потребоваться некоторое редактирование для связи с Qt5.

Другие вопросы по тегам