Я использую библиотеку 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()':
Это не все ошибки, но все ошибки, которые поместятся в терминале, можно найти здесь:
Одна из вещей, которые я заметил, это то, что vtkSmartPointer появился очень часто. Думаю, это был первый заголовочный файл, о котором мне сообщили, когда я пытался скомпилировать код C++ без библиотеки VTK. Не знаю, значит ли это что-нибудь.
VTK was not built with Qt
Вам нужно пересобрать VTK с той версией Qt, которую вы хотите использовать. - person drescherjm   schedule 11.07.2014I'll post my Makefile and errors below
Рекомендуется использовать CMake для собственного приложения вместо любого другого метода. Это избавит вас от необходимости вводить десятки библиотечных записей. Также заводская инициализация в новых версиях vtk. - person drescherjm   schedule 11.07.2014VTK_Group_Qt
Какую версию VTK вы используете? - person drescherjm   schedule 12.07.2014LDFLAGS = -L. -lpmdaccess2 -lc
. Однако я рекомендую вам полностью удалить make-файл и использовать CMake для создания вашего проекта. Вам придется потратить некоторое время (несколько дней), чтобы понять CMake достаточно, чтобы сделать это. - person drescherjm   schedule 12.07.2014but 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