неопределенная ссылка на символ '_ZN3ros10NodeHandle9subscribeERNS_16SubscribeOptionsE' - PullRequest
0 голосов
/ 31 августа 2018

Я просто пытаюсь скомпилировать программу в ROS. Я уже связал все необходимые библиотеки, но эту я не могу найти. Все, что я получаю, это следующая ошибка в блоках кода (также в затмении).

Кто-нибудь знает, как избавиться от этой ошибки? Или даже какую библиотеку он требует?

/usr/bin/ld:CMakeFiles/DistanceKinectDemo.dir/src/DistanceKinectDemo.cpp.o: undefined reference to symbol

'_ZN3ros10NodeHandle9subscribeERNS_16SubscribeOptionsE'

/opt/ros/kinetic/lib/libroscpp.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
gpuvoxelgetpointcloud/CMakeFiles/DistanceKinectDemo.dir/build.make:370: recipe for target 
'/home/pcl_gpu/devel/lib/gpuvoxelgetpointcloud/DistanceKinectDemo' failed
make[2]: *** [/home/shupeng/pcl_gpu/devel/lib/gpuvoxelgetpointcloud/DistanceKinectDemo] Error 1
CMakeFiles/Makefile2:1130: recipe for target 'gpuvoxelgetpointcloud/CMakeFiles/DistanceKinectDemo.dir/all' failed

1 Ответ

0 голосов
/ 31 августа 2018

Ваш компоновщик не может найти символ в списке библиотек. При вызове find_package(catkin REQUIRED COMPONENTS ... должен быть указан компонент roscpp. Кроме того, вам нужно добавить ${catkin_LIBRARIES} к вашему target_link_libraries вызову. Наконец, библиотеки для связывания должны быть перечислены в порядке убывания относительно их зависимостей, что означает, что вы должны поставить ${catkin_LIBRARIES} в конце вызова target_link_libraries, если у вас есть другие библиотеки, зависящие от него. В итоге ваш CMakeLists.txt файл должен выглядеть так:

...
find_package(catkin REQUIRED COMPONENTS roscpp <more packages>)
...
add_executable(DistanceKinectDemo <your cpp files>)
...
target_link_libraries(DistanceKinectDemo
<all your libraries and other dependencies>
${catkin_LIBRARIES}
)
...