Невозможно запустить image_transport из кода cpp: `Ошибка сегментации (ядро сброшено)`
Я включил хорошо image_transport
в обоих моих CMake
файл и packake.xml
, Я использую ROS Kineltic на Ubuntu 16, хотя я получил ту же проблему на Ubuntu 14 с ros indigo и jade.
Мой файл CMake выглядит следующим образом:
find_package(catkin REQUIRED COMPONENTS
cv_bridge
image_transport
roscpp
rospy
std_msgs
message_generation
genmsg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
CATKIN_DEPENDS cv_bridge image_transport roscpp rospy std_msgs message_generation
)
include_directories(
${catkin_INCLUDE_DIRS}
)
....
Пока мой package.xml
является
<buildtool_depend>catkin</buildtool_depend>
<build_depend>cv_bridge</build_depend>
<build_depend>image_transport</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>message_generation</build_depend>
<run_depend>cv_bridge</run_depend>
<run_depend>image_transport</run_depend>
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
<run_depend>message_runtime</run_depend>
<run_depend>message_generation</run_depend>
<run_depend>image_transport</run_depend>
и в моем файле.cpp
#include <ros/ros.h>
#include <image_transport/image_transport.h>
.....
int main(int argc, char **argv)
{
ros::init(argc, argv, "imagegraber");
ros::NodeHandle nodea;
image_transport::ImageTransport it(nodea);
image_transport::Subscriber sub = it.subscribe("/pg_15508342/image_raw", 1, imageCallback);
ros::spin();
return 0;
}
Тем не менее, я получаю Segmentation fault (core dumped)
когда я запускаю свой код.... В чем может быть проблема? Код падает при image_transport::ImageTransport it(nodea);
Обратите внимание, что я могу запустить image_transport из командной строки: rosrun image_transport republish raw in:=/pg_15508342/image_raw raw out:=/newim
, Также в состоянии бежать image_view
1 ответ
Я думаю, что теперь я вижу происхождение проблемы. Это связано с Boost, включенным извне. На самом деле мне следовало сообщить о своем полном CMakeLists.txt в вопросе, но я изначально был далек от мысли, что проблема была в какой-то мере связанной с...
В моем CMakeLists.txt я включил свой собственный Boost (последняя версия, загруженная из источника), как
SET (BOOST_DIR "/home/polar/soft/lib/boost/boost_1_61_0")
SET (BOOST_INCLUDEDIR "/home/polar/soft/lib/boost/boost_1_61_0/build/include")
SET (BOOST_LIBRARYDIR "/home/polar/soft/lib/boost/boost_1_61_0/build/lib")
FIND_PACKAGE(Boost 1.61.0 REQUIRED thread)
if (NOT Boost_FOUND)
message(FATAL_ERROR " Fatal error: Boost (version >= 1.55) required.")
else()
message(STATUS "Setting up BOOST")
message(STATUS " Includes - ${Boost_INCLUDE_DIRS}")
message(STATUS " Library - ${Boost_LIBRARY_DIRS}")
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
endif (NOT Boost_FOUND)
Как таковой я получил ошибку сегментации в image_transport::ImageTransport it(nh);
, Однако после замены вышеуказанного кода CMake только
FIND_PACKAGE(Boost)
У меня больше нет этой ошибки сегментации. Я должен был обратить больше внимания на предупреждающее сообщение, данное ros относительно возможного конфликта между Boost ROS и моим автономным Boost....
Таким образом, другой вопрос, как использовать автономный Boost с ROS catkin?