leggedrobotics / darknet_ros

YOLO ROS: Real-Time Object Detection for ROS
BSD 3-Clause "New" or "Revised" License
2.14k stars 1.16k forks source link

Conflicting declaration of C function `void show_image_cv` when building for ROS2 Foxy #350

Open mnissov opened 2 years ago

mnissov commented 2 years ago

Describe the bug Building the foxy branch of darknet_ros results in several errors

To Reproduce Steps to reproduce the behavior:

  1. cd ~/ros_ws/src
  2. git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
  3. git fetch && git checkout foxy
  4. cd ../
  5. colcon build --symlink-install --packages-select darknet_ros darknet_ros_msgs --cmake-args -DCMAKE_BUILD_TYPE=Release

System (please complete the following information):

Additional context Have previously built for noetic on same computer with no problems.

Ar-Ray-code commented 2 years ago

Please tell me OpenCV-version.

For OpenCV4, the submodule darknet is not available, so please consider the following repository.

darknet-fp16 (using AlexeyAB/darknet)

mnissov commented 2 years ago

In the foxy branch of legged_robotics/darknet_ros, they write

The YOLO packages have been tested under ROS Foxy, Ubuntu 20.04 and OpenCV 4.2.0. This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

So it seems it should be compatible? That being said, attempting to compile still results in

$ colcon build --packages-select darknet_ros --cmake-args -DCMAKE_BUILD_TYPE=Release
Starting >>> darknet_ros
--- stderr: darknet_ros                             
/home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c: In function ‘validate_attention_single’:
/home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c:290:9: error: too few arguments to function ‘show_image’
  290 |         show_image(crop, "crop");
      |         ^~~~~~~~~~
In file included from /home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c:1:
/home/morten/ros2_ws/src/darknet_ros/darknet/include/darknet.h:709:5: note: declared here
  709 | int show_image(image p, const char *name, int ms);
      |     ^~~~~~~~~~
/home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c:301:13: error: too few arguments to function ‘show_image’
  301 |             show_image(tile, "tile");
      |             ^~~~~~~~~~
In file included from /home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c:1:
/home/morten/ros2_ws/src/darknet_ros/darknet/include/darknet.h:709:5: note: declared here
  709 | int show_image(image p, const char *name, int ms);
      |     ^~~~~~~~~~
make[2]: *** [CMakeFiles/darknet_ros_lib.dir/build.make:2681: CMakeFiles/darknet_ros_lib.dir/home/morten/ros2_ws/src/darknet_ros/darknet/examples/attention.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /home/morten/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:27,
                 from /home/morten/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/opt/ros/foxy/include/image_transport/image_transport.h:41:89: note: #pragma message: Warning: This header is deprecated. Use 'image_transport.hpp' instead
   41 | #pragma message ("Warning: This header is deprecated. Use 'image_transport.hpp' instead")
      |                                                                                         ^
In file included from /home/morten/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/home/morten/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:62:17: error: conflicting declaration of C function ‘void show_image_cv(image, const char*, IplImage*)’
   62 | extern "C" void show_image_cv(image p, const char *name, IplImage *disp);
      |                 ^~~~~~~~~~~~~
In file included from /home/morten/ros2_ws/src/darknet_ros/darknet/src/network.h:6,
                 from /home/morten/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:49,
                 from /home/morten/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/home/morten/ros2_ws/src/darknet_ros/darknet/src/image.h:20:5: note: previous declaration ‘int show_image_cv(image, const char*, int)’
   20 | int show_image_cv(image im, const char* name, int ms);
      |     ^~~~~~~~~~~~~
/home/morten/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp: In function ‘image** darknet_ros::load_alphabet_with_file_cp(char*)’:
/home/morten/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:578:18: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
  578 |   char* labels = "/labels/%d_%d.png";
      |                  ^~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/darknet_ros_lib.dir/build.make:2057: CMakeFiles/darknet_ros_lib.dir/src/YoloObjectDetector.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:107: CMakeFiles/darknet_ros_lib.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
---
Failed   <<< darknet_ros [4.53s, exited with code 2]

Summary: 0 packages finished [4.64s]
  1 package failed: darknet_ros
  1 package had stderr output: darknet_ros
takeyamayuki commented 1 year ago

Same problem here.

error

$ colcon build --symlink-install --packages-select darknet_ros --cmake-args -DCMAKE_BUILD_TYPE=Release
Starting >>> darknet_ros
--- stderr: darknet_ros                            
/home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c: In function ‘validate_attention_single’:
/home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c:290:9: error: too few arguments to function ‘show_image’
  290 |         show_image(crop, "crop");
      |         ^~~~~~~~~~
In file included from /home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c:1:
/home/frontieris/ros2_ws/src/darknet_ros/darknet/include/darknet.h:709:5: note: declared here
  709 | int show_image(image p, const char *name, int ms);
      |     ^~~~~~~~~~
/home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c:301:13: error: too few arguments to function ‘show_image’
  301 |             show_image(tile, "tile");
      |             ^~~~~~~~~~
In file included from /home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c:1:
/home/frontieris/ros2_ws/src/darknet_ros/darknet/include/darknet.h:709:5: note: declared here
  709 | int show_image(image p, const char *name, int ms);
      |     ^~~~~~~~~~
make[2]: *** [CMakeFiles/darknet_ros_lib.dir/build.make:2711: CMakeFiles/darknet_ros_lib.dir/home/frontieris/ros2_ws/src/darknet_ros/darknet/examples/attention.c.o] エラー 1
make[2]: *** 未完了のジョブを待っています....
In file included from /home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:27,
                 from /home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/opt/ros/foxy/include/image_transport/image_transport.h:41:89: note: #pragma message: Warning: This header is deprecated. Use 'image_transport.hpp' instead
   41 | #pragma message ("Warning: This header is deprecated. Use 'image_transport.hpp' instead")
      |                                                                                         ^
In file included from /home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:62:17: error: conflicting declaration of C function ‘void show_image_cv(image, const char*, IplImage*)’
   62 | extern "C" void show_image_cv(image p, const char *name, IplImage *disp);
      |                 ^~~~~~~~~~~~~
In file included from /home/frontieris/ros2_ws/src/darknet_ros/darknet/src/network.h:6,
                 from /home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/include/darknet_ros/YoloObjectDetector.hpp:49,
                 from /home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:10:
/home/frontieris/ros2_ws/src/darknet_ros/darknet/src/image.h:20:5: note: previous declaration ‘int show_image_cv(image, const char*, int)’
   20 | int show_image_cv(image im, const char* name, int ms);
      |     ^~~~~~~~~~~~~
/home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp: In function ‘image** darknet_ros::load_alphabet_with_file_cp(char*)’:
/home/frontieris/ros2_ws/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp:578:18: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
  578 |   char* labels = "/labels/%d_%d.png";
      |                  ^~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/darknet_ros_lib.dir/build.make:2087: CMakeFiles/darknet_ros_lib.dir/src/YoloObjectDetector.cpp.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:107: CMakeFiles/darknet_ros_lib.dir/all] エラー 2
make: *** [Makefile:141: all] エラー 2
---
Failed   <<< darknet_ros [2.66s, exited with code 2]

Summary: 0 packages finished [2.81s]
  1 package failed: darknet_ros
  1 package had stderr output: darknet_ros

environments

takeyamayuki commented 1 year ago

Perhaps it is due to different reference commits in darknet. I'm not sure which commit to reference.

poeldan commented 1 year ago

Is there already a solution? I am facing the same problem

System: OS: Ubuntu 20.04 ROS version: Humble GPU: Nvidia GeForce GTX 1060 OpenVC: 4.5.4

Savarati commented 7 months ago

darknet_ros/darknet under master and foxy branch are different git repopositories

We can do that: cd darkent_ros rm -rf darkent git clone https://github.com/pjreddie/darknet.git git reset --hard 508381b37fe75e0e1a01bcb2941cb0b31eb0e4c9

Also note, opencv version used is 4.2.0

I use: Ubuntu 22.04
ROS Humble compile successfully