mavlink / mavros

MAVLink to ROS gateway with proxy for Ground Control Station
Other
847 stars 983 forks source link

Errors when building with Clang #1931

Open mishmetall opened 4 months ago

mishmetall commented 4 months ago

When building with Clang, I'm getting these errors:

> colcon build --cmake-args -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++

...
In file included from /home/rosdev/ros2_ws/src/mavros/mavros/src/lib/mavros_router.cpp:20:
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:72:32: error: allocating an object of abstract class type 'mavros::router::Endpoint'
  RCLCPP_SMART_PTR_DEFINITIONS(Endpoint)
                               ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:103:16: note: unimplemented pure virtual method 'is_open' in 'Endpoint'
  virtual bool is_open() = 0;
               ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:104:40: note: unimplemented pure virtual method 'open' in 'Endpoint'
  virtual std::pair<bool, std::string> open() = 0;
                                       ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:105:16: note: unimplemented pure virtual method 'close' in 'Endpoint'
  virtual void close() = 0;
               ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:107:16: note: unimplemented pure virtual method 'send_message' in 'Endpoint'
  virtual void send_message(
               ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_router.hpp:113:16: note: unimplemented pure virtual method 'diag_run' in 'Endpoint'
  virtual void diag_run(diagnostic_updater::DiagnosticStatusWrapper & stat) = 0;
               ^
In file included from /home/rosdev/ros2_ws/src/mavros/mavros/src/lib/uas_data.cpp:19:
In file included from /home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/mavros_uas.hpp:45:
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/plugin.hpp:68:32: error: allocating an object of abstract class type 'mavros::plugin::Plugin'
  RCLCPP_SMART_PTR_DEFINITIONS(Plugin)
                               ^
/home/rosdev/ros2_ws/src/mavros/mavros/include/mavros/plugin.hpp:95:25: note: unimplemented pure virtual method 'get_subscriptions' in 'Plugin'
  virtual Subscriptions get_subscriptions() = 0;

MAVROS version and platform

Mavros: 2e20c1c ROS: Humble, Foxy Ubuntu: 22.04, 20.04

vooon commented 4 months ago

Clang, what for? Never tried to build rclcpp with it.

mishmetall commented 4 months ago

Clang has various features for analysis, e.g. Quality guide: ensuring code quality, but it's also a good thing to not depend on a single WoW, gcc and clang are the most widely used compilers

vooon commented 4 months ago

So, does rclcpp and other components compile fine? I'm not quite interested in jumping and changing rcl's macros across whole codebase of mavros.

mishmetall commented 4 months ago

Not sure about rclcpp, never tried, but other components that I tried to compile just fine. I guess Mavros will compile just fine as well if this problem is fixed, I have seen only this issue so far

mishmetall commented 4 months ago

It's mentioned in the documentation that it is possible to do Ros2 Building with clang

woensug-choi commented 1 week ago

I want to solve this problem too. trying to install on mac(apple silicon) but fails with same error msg

found something similar at https://github.com/ros2/rmw_cyclonedds/pull/256 https://github.com/ros2/rmw_cyclonedds/pull/256#issuecomment-796754307 https://github.com/ros2/rmw_cyclonedds/pull/256#issuecomment-797313468