Добавление PCL (библиотека облаков точек) в существующий проект с помощью Makefiles

У меня проблема с PCL: в частности, я хочу использовать его в существующем проекте с существующими файлами Makefile. Однако PCL использует CMake, и я не смог найти, как добавить его напрямую в Makefile. Кто-нибудь знает как это сделать?


person Vahe    schedule 09.09.2015    source источник
comment
В чем здесь вопрос? Как сделать ссылку на библиотеку? Как автоматически получить библиотеку, созданную вашим make-файлом? Что-то другое?   -  person Etan Reisner    schedule 09.09.2015
comment
Да, как линковать PCL прямо в Makefile.   -  person Vahe    schedule 09.09.2015
comment
То, как связать данную библиотеку, не имеет ничего общего с тем, как эта библиотека построена. Вы просто спрашиваете, как добавить правильные флаги в вашу команду ссылки, чтобы ваш двоичный файл был связан с доступной в системе библиотекой PCL?   -  person Etan Reisner    schedule 09.09.2015
comment
Извините, я новичок в теме, поэтому не до конца понимаю, что вы говорите. То, что я прошу, будет лучше перефразировано на то, как перевести код cmake отсюда pointclouds.org/documentation/tutorials/ напрямую к коду в make-файле. Чтобы я мог использовать PCL в своем проекте.   -  person Vahe    schedule 09.09.2015
comment
make не имеет эквивалента этой конструкции. Вот для чего нужны автоинструменты. Нужно ли вам что-то подобное, зависит от того, как устанавливается PCL (хотя, если предположить, что это там, вам, вероятно, это нужно). Устанавливает ли PCL файл pkg-config .pc?   -  person Etan Reisner    schedule 09.09.2015
comment
Я ничего не смог найти, набрав в оболочке [pkg-config --libs pcl] и [pkg-config --cflags pcl], если, конечно, это правильный способ проверки.   -  person Vahe    schedule 09.09.2015
comment
Попробуйте pkg-config --list-all | less и найдите PCL/pcl/и т. д.? Он также может быть не в стандартном месте. Но я думаю, что это в основном то, что cmake использует для поиска библиотек, поэтому, надеюсь, он работает правильно.   -  person Etan Reisner    schedule 09.09.2015
comment
Я вижу разные библиотеки pcl! В частности, мне нужны pcl_registration-1.7, pcl_io-1.7 и pcl_common-1.7. Как мне теперь добавить их в makefile?   -  person Vahe    schedule 09.09.2015
comment
Вам нужно добавить вывод pkg-config --libs pcl_registration-1.7, pkg-config --cflags pcl_registration-1.7 и т. д. к флагам компиляции и компоновщика вашего make-файла. То, как вы сделаете это в вашем make-файле, зависит от содержимого вашего make-файла.   -  person Etan Reisner    schedule 09.09.2015
comment
Вот почти! Теперь я получаю /usr/include/boost/system/error_code.hpp:222: неопределенная ссылка на `boost::system::generic_category()'. И эта ошибка не появляется, если я компилирую makefile без этих дополнений. Я думаю, то, что вы сказали, заменяет include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) в CMake, а как насчет add_definitions(${PCL_DEFINITIONS})?   -  person Vahe    schedule 09.09.2015
comment
Хорошо, я добавил -lboost_system, и теперь он отлично компилируется. Итан, огромное спасибо за помощь! Будет читать больше об этом.   -  person Vahe    schedule 09.09.2015


Ответы (1)


Сначала попробуйте скомпилировать один из примеров, представленных на веб-сайте PCL, с помощью CMake. http://pointclouds.org/documentation/tutorials/pcl_visualizer.php

После компиляции приведенного выше примера вы найдете различные новые файлы и папку, созданную CMake, в своем каталоге.

Перейдите в CMakeFiles/pcl_visualizer_demo.dir/. Откройте файл с именем link.txt, который содержит команду терминала, которая имеет различные pcl (библиотеки облаков точек), динамически связанные с файлом.

команда должна выглядеть аналогично команде, показанной ниже

/usr/bin/c++ -O3 -Wno-deprecated -s CMakeFiles/pcl_visualizer_demo.dir -o pcl_visualizer_demo -rdynamic -lpcl_common -Wl,-Bstatic -lflann_cpp_s -Wl,-Bdynamic -lpcl_kdtree -lpcl_octree -lpcl_search -lqhull -lpcl_surface -lpcl_sample_consensus -lpcl_io -lpcl_filters -lpcl_features -lpcl_keypoints -lpcl_registration -lpcl_segmentation -lpcl_recognition -lpcl_visualization -lpcl_people -lpcl_outofcore -lpcl_tracking /usr/lib/libvtkGenericFiltering.so.5.8.0 /usr/lib/libvtkGeovis.so.5.8.0 /usr/lib/libvtkCharts.so.5.8.0 /usr/lib/libvtkViews.so.5.8.0 /usr/lib/libvtkInfovis.so.5.8.0 /usr/lib/libvtkWidgets.so.5.8.0

Вы можете включить эти библиотеки напрямую в ваш Makefile.

Если вы используете другие функции или файлы заголовков pcl, то сначала попробуйте скомпилировать его с помощью CMake, связать библиотеки и добавить их в свой Makefile предыдущего проекта.

Я попробовал этот метод для своего проекта, который работал отлично. Я попытался pkg-config связать библиотеки, но в моем случае это не сработало. Я не смог найти никакого другого метода, который бы легко связывал все необходимые библиотеки.

person Kole    schedule 12.10.2016