Azure_Kinect_ROS_Driver icon indicating copy to clipboard operation
Azure_Kinect_ROS_Driver copied to clipboard

catkin_make Azure_Kinect_ROS_Driver error with source built OpenCV 3.4.7

Open xspkwy opened this issue 4 years ago • 3 comments

  • Description: I have followed the official guide of Azure-Kinect-Sensor-SDK and test k4aviewer successfully, but when I then created a ros workspace, downloaded Azure_Kinect_ROS_Driver and catkin_make it, it seems to fail: Scanning dependencies of target azure_kinect_ros_driver_nodelet Scanning dependencies of target azure_kinect_ros_driver_node [ 10%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_ros_bridge_node.cpp.o [ 20%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_ros_device.cpp.o [ 30%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_ros_device_params.cpp.o [ 40%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_nodelet.dir/src/k4a_ros_bridge_nodelet.cpp.o [ 50%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_nodelet.dir/src/k4a_ros_device.cpp.o [ 60%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_nodelet.dir/src/k4a_ros_device_params.cpp.o [ 70%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_calibration_transform_data.cpp.o [ 80%] Building CXX object Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_nodelet.dir/src/k4a_calibration_transform_data.cpp.o [100%] Linking CXX executable /home/vclabr/KinectDK_ws/devel/lib/azure_kinect_ros_driver/node [100%] Linking CXX shared library /home/vclabr/KinectDK_ws/devel/lib/libazure_kinect_ros_driver_nodelet.so [100%] Built target azure_kinect_ros_driver_nodelet CMakeFiles/azure_kinect_ros_driver_node.dir/src/k4a_ros_device.cpp.o:在函数‘cv::Mat::Mat(int, int, int, void*, unsigned long)’中: k4a_ros_device.cpp:(.text._ZN2cv3MatC2EiiiPvm[_ZN2cv3MatC5EiiiPvm]+0x296):对‘cv::Mat::updateContinuityFlag()’未定义的引用 collect2: error: ld returned 1 exit status Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/build.make:214: recipe for target '/home/vclabr/KinectDK_ws/devel/lib/azure_kinect_ros_driver/node' failed make[2]: *** [/home/vclabr/KinectDK_ws/devel/lib/azure_kinect_ros_driver/node] Error 1 CMakeFiles/Makefile2:519: recipe for target 'Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/all' failed make[1]: *** [Azure_Kinect_ROS_Driver/CMakeFiles/azure_kinect_ros_driver_node.dir/all] Error 2 Makefile:140: recipe for target 'all' failed make: *** [all] Error 2 Invoking "make -j8 -l8" failed

  • I have searched for long and found two similar issues: issue #127 and issue #1135 I have tried their solutions, and checked my OpenCV version by opencv_version and it shows 3.4.7, which confuses me because they said the issues may due to the version of opencv is too old.

  • System config: ubuntu18.04, ros-melodic, libk4a1.4 libk4a1.4-dev k4a-tools, opencv3.4.7 which is built from source.

So if any applicable solutions? Thanks!

xspkwy avatar Jan 20 '21 14:01 xspkwy

Thank you for the report. The Interface for OpenCV is different between versions. A code #ifdef needs to be added to detect the OpenCV version, and compile for the different interface.

We would appreciate a PR for this.

ooeygui avatar Jan 20 '21 19:01 ooeygui

Thanks for your advice, I would submit a PR when I fixed the issue. But I am still not sure how to fix it, could you tell me the details of changes?

xspkwy avatar Jan 21 '21 01:01 xspkwy

Hello @xspkwy , Thank you for your interest in looking at the PR. OpenCV headers provide a version define CV_MINOR_VERSION & CV_MINOR_VERSION. You can check them like this:

#if (CV_MAJOR_VERSION > 3 ||  (CV_MAJOR_VERSION == 3 && CV_MINOR_VERSION >= 7))
 // new code, assuming it also compiles on OpenCV 4+
#else
// older code
#endif

ooeygui avatar Jan 21 '21 17:01 ooeygui