Ошибки объектных файлов PCL и VTK

Я использую библиотеку CamBoard Nano и Point Cloud в программе на C++. На данный момент он использует пару других библиотек и одну основную функцию C++. Кто-то написал код для Windows, а я переношу его на Linux (Ubuntu 12.04). Мне удалось скомпилировать файл C++ с помощью Makefile, но теперь я получаю массу ошибок из объектного файла. Я новичок в C++, и я не понимаю, что они все означают. Похоже, что все они связаны с одной и той же проблемой, надеюсь, одно изменение все исправит.

Мне удалось исправить ошибки в файле C++, установив некоторые библиотеки (PCL, VTK, Eigen, OpenNI и т. д.). Ниже выложу что смогу из ошибок, они заполняют больше чем весь терминал. Я поискал в Google и нашел это: Qt 4.7 + VTK 5.6.1 в Mac OS X 10.6: ошибки при связывании проектов

Я загрузил QT 5.3, но когда я использую cmake в примере программы, я получаю следующую ошибку:

-- The C compiler identification is GNU 4.6.3
-- The CXX compiler identification is GNU 4.6.3
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at CMakeLists.txt:20 (message):
  VTK was not built with Qt


-- Configuring incomplete, errors occurred!

Я пытаюсь исправить это сейчас. Ниже я опубликую свой Makefile и ошибки, поэтому, если кто-нибудь знает, как это исправить, или у вас есть совет, дайте мне знать. Спасибо!

Makefile:

CC = g++-4.4
CFLAGS = -I ../include -I ~/../../usr/include/pcl-1.7/ -I ~/../../usr/include/eigen3/Eigen/src -I ~/../../usr/include/vtk-5.8
# first location: pmd header files (include, back one directory)
# second location: your pcl header files
# third location: your eigen header files
# fourth location: your vtk header files
LDFLAGS = -L. -lpmdaccess2 -lc

all: main
main: main.cpp copysdk copyplugins
    $(CC) $(CFLAGS)  -c -o main.o main.cpp
    $(CC) $(LDFLAGS) -o main main.o

copysdk:
    cp ../bin/libpmdaccess* ./  # bin folder back one directory

copyplugins:
    cp ../bin/camboardnano* ./

clean: 
    rm main
    rm main.o
    rm camboardnano*
    rm libpmdaccess*

Пример ошибок:

main.o: In function `bool pcl::visualization::PCLVisualizer::addArrow<pcl::PointXYZ, pcl::PointXYZ>(pcl::PointXYZ const&, pcl::PointXYZ const&, double, double, double, double, double, double, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
main.cpp:(.text._ZN3pcl13visualization13PCLVisualizer8addArrowINS_8PointXYZES3_EEbRKT_RKT0_ddddddRKSsi[bool pcl::visualization::PCLVisualizer::addArrow<pcl::PointXYZ, pcl::PointXYZ>(pcl::PointXYZ const&, pcl::PointXYZ const&, double, double, double, double, double, double, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)]+0xcc): undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
main.cpp:(.text._ZN3pcl13visualization13PCLVisualizer8addArrowINS_8PointXYZES3_EEbRKT_RKT0_ddddddRKSsi[bool pcl::visualization::PCLVisualizer::addArrow<pcl::PointXYZ, pcl::PointXYZ>(pcl::PointXYZ const&, pcl::PointXYZ const&, double, double, double, double, double, double, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)]+0x22d): undefined reference to `vtkActor2D::GetProperty()'
main.cpp:(.text._ZN3pcl13visualization13PCLVisualizer8addArrowINS_8PointXYZES3_EEbRKT_RKT0_ddddddRKSsi[bool pcl::visualization::PCLVisualizer::addArrow<pcl::PointXYZ, pcl::PointXYZ>(pcl::PointXYZ const&, pcl::PointXYZ const&, double, double, double, double, double, double, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)]+0x279): undefined reference to `pcl::visualization::PCLVisualizer::addActorToRenderer(vtkSmartPointer<vtkProp> const&, int)'
main.o: In function `bool pcl::visualization::PCLVisualizer::addPointCloud<pcl::PointXYZ>(pcl::PointCloud<pcl::PointXYZ>::ConstPtr const&, pcl::visualization::PointCloudGeometryHandler<pcl::PointXYZ> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
main.cpp:(.text._ZN3pcl13visualization13PCLVisualizer13addPointCloudINS_8PointXYZEEEbRKNS_10PointCloudIT_E8ConstPtrERKNS0_25PointCloudGeometryHandlerIS5_EERKSsi[bool pcl::visualization::PCLVisualizer::addPointCloud<pcl::PointXYZ>(pcl::PointCloud<pcl::PointXYZ>::ConstPtr const&, pcl::visualization::PointCloudGeometryHandler<pcl::PointXYZ> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)]+0x84): undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
main.o: In function `vtkSmartPointer<vtkDataSet>::~vtkSmartPointer()':

Это не все ошибки, но все ошибки, которые поместятся в терминале, можно найти здесь:

http://pastebin.com/jgbczK74

Одна из вещей, которые я заметил, это то, что vtkSmartPointer появился очень часто. Думаю, это был первый заголовочный файл, о котором мне сообщили, когда я пытался скомпилировать код C++ без библиотеки VTK. Не знаю, значит ли это что-нибудь.


person user3738294    schedule 11.07.2014    source источник
comment
VTK was not built with Qt Вам нужно пересобрать VTK с той версией Qt, которую вы хотите использовать.   -  person drescherjm    schedule 11.07.2014
comment
I'll post my Makefile and errors below Рекомендуется использовать CMake для собственного приложения вместо любого другого метода. Это избавит вас от необходимости вводить десятки библиотечных записей. Также заводская инициализация в новых версиях vtk.   -  person drescherjm    schedule 11.07.2014
comment
Хорошо спасибо. Итак, чтобы пересобрать VTK, мне нужно снова следовать инструкциям по сборке вне исходного кода в README.html? $ cd VTK-сборка $ ccmake ../VTK $ make   -  person user3738294    schedule 11.07.2014
comment
Кстати, VTK-5.X не собирается с Qt-5.X. Вам нужен Qt-4.7.X или Qt-4.8.X, если вы используете VTK-5.X   -  person drescherjm    schedule 11.07.2014
comment
Так что я прошел и установил Qt-4.8, затем попытался связать его с VTK-5.8 через меню в ccmake. По какой-то причине мне пришлось переустановить PCL и Eigen, и теперь я получаю ту же ошибку при попытке скомпилировать VTK/Examples/GUI/Qt/SimpleView: VTK не был собран с QT. Какая еще информация вам нужна от меня?   -  person user3738294    schedule 11.07.2014
comment
Кроме того, может ли кто-нибудь объяснить, что именно означают коды ошибок, которые я получаю? Есть ли проблема с подключением библиотек? Это то, что делают файлы .o? Почему файл .cpp компилируется после добавления библиотек, а файл .o — нет? Спасибо.   -  person user3738294    schedule 12.07.2014
comment
Вам снова нужно пересобрать VTK с той версией Qt, которую вы используете.   -  person drescherjm    schedule 12.07.2014
comment
Что касается ошибок компоновщика: stackoverflow.com/questions/12573816/   -  person drescherjm    schedule 12.07.2014
comment
Я думал, что сделал это. С помощью ccmake, как указано в инструкции, я включил VTK_Group_Qt, затем нажал c для настройки. Затем я использовал make. Что еще нужно для восстановления?   -  person user3738294    schedule 12.07.2014
comment
Затем нужно построить ВТК. настройка это не строительство. На сборку должно уйти 30+ минут.   -  person drescherjm    schedule 12.07.2014
comment
VTK_Group_Qt Какую версию VTK вы используете?   -  person drescherjm    schedule 12.07.2014
comment
Хорошо. Я посмотрю на это больше на следующей неделе. Возможно, была ошибка с make. Это заняло не более 3 минут. Когда я изначально построил его, это заняло почти 50 минут. Спасибо за совет и информацию, в понедельник отпишусь.   -  person user3738294    schedule 12.07.2014
comment
Я думал, что использую V5.8, так как в usr/include папка 5.8, но VTK_Group_QT был указан в параметрах v6, а параметров v5 не было в моем меню ccmake. Я подумал, что это странно. Может быть, у меня есть оба сейчас, и они не настроены правильно.   -  person user3738294    schedule 12.07.2014
comment
Ваши неопределенные ссылки связаны с тем, что вам нужно добавить библиотеки vtk и pcl в вашу строку LDFLAGS = -L. -lpmdaccess2 -lc. Однако я рекомендую вам полностью удалить make-файл и использовать CMake для создания вашего проекта. Вам придется потратить некоторое время (несколько дней), чтобы понять CMake достаточно, чтобы сделать это.   -  person drescherjm    schedule 12.07.2014
comment
Хорошо. Большое спасибо. Я сделаю это.   -  person user3738294    schedule 12.07.2014
comment
but VTK_Group_QT was listed under v6 options, and the v5 options weren't there on my ccmake menu. I thought that was strange. – Да странно. Вот почему я спросил вас об этом. Ваш CMakeCache.txt в папке сборки должен указывать на VTK6.   -  person drescherjm    schedule 12.07.2014
comment
Ладно, думаю, я исправил проблему. Я могу запустить пример в VTK/Examples/GUI/QT/SimpleView. Я все еще получаю тот же набор кодов ошибок, когда пытаюсь скомпилировать свой проект.   -  person user3738294    schedule 14.07.2014
comment
Вот обновленные коды ошибок: pastebin.com/7tadTG3D   -  person user3738294    schedule 14.07.2014
comment
Установил ВТК 5.10. В моем каталоге usr/include все еще есть vtk-5.8, и я не вижу ни одного vtk-5.10. Хотя есть куча файлов заголовков vtkqt прямо в usr/include   -  person user3738294    schedule 14.07.2014
comment
Если вы все еще используете Makefile из приведенного выше, ваши неопределенные ссылки ожидаются. Вы не связываетесь ни с одной из нескольких десятков библиотек vtk или библиотек pcl. Опять же, я бы порекомендовал использовать CMake для создания вашего Makefile и не делать ничего сложного, если вы не являетесь экспертом.   -  person drescherjm    schedule 14.07.2014
comment
Хорошо, я буду использовать CMake. Вы знаете, чего мне не хватает в моем Makefile, просто для справки в будущем? Должен ли я использовать библиотеки .a и .so?   -  person user3738294    schedule 14.07.2014
comment
Я бы позволил кому-то с большим опытом gcc ответить на это. На windows я предпочитаю связывать vtk, itk... статически.   -  person drescherjm    schedule 14.07.2014
comment
Обновление: я закончил свой CMakeLists.txt: pastebin.com/R5ri8uVv. Спасибо за вашу помощь.   -  person user3738294    schedule 15.07.2014
comment
Да, работает нормально. Больше никаких проблем.   -  person user3738294    schedule 16.07.2014
comment
Пожалуйста, добавьте ответ и примите его.   -  person David Doria    schedule 25.08.2014