ros-controls / ros2_control

Generic and simple controls framework for ROS 2
https://control.ros.org
Apache License 2.0
463 stars 282 forks source link

Error while trying to create a custom package using ros2_control (Windows) #1314

Open GilmarCorreia opened 7 months ago

GilmarCorreia commented 7 months ago

Describe the bug Hello ROS Developers,

Today I encountered a new issue while attempting to build a custom ROS2 package (sim_ros2_control) that utilizes some ROS2 control packages (hardware_interfaces, controller_manager, ...). I have successfully built the same package on Linux 22.04, but now I'm trying to build it on Windows (with all the necessary Visual Studio compilers and dependencies).

When I attempt to run colcon build, the following errors appear (excerpt from the log):

C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/types/hardware_interface_return_values.hpp(25,3): error C2143: syntax error: missing '}' before 'constant' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/types/hardware_interface_return_values.hpp(25,3): error C2059: syntax error: 'constant' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/types/hardware_interface_return_values.hpp(26,1): error C2143: syntax error: missing ';' before '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/types/hardware_interface_return_values.hpp(28,1): error C2059: syntax error: '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/types/hardware_interface_return_values.hpp(28,1): error C2143: syntax error: missing ';' before '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/resource_manager.hpp(33,1): error C2143: syntax error: missing ';' before '{' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\Users\user\Desktop\ros2_ws\install\hardware_interface\include\hardware_interface/resource_manager.hpp(33,1): error C2447: '{': missing function header (old-style formal list?) (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(53,5): error C2143: syntax error: missing '}' before 'constant' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(53,5): error C2059: syntax error: 'constant' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(54,3): error C2143: syntax error: missing ';' before '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(54,3): error C2238: unexpected token(s) preceding ';' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(62,15): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(62,15): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(62,3): error C2146: syntax error: missing ';' before identifier 'on_configure' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(62,45): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(70,13): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(70,13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(70,3): error C2146: syntax error: missing ';' before identifier 'on_cleanup' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(70,43): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(78,14): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(78,14): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(78,3): error C2146: syntax error: missing ';' before identifier 'on_shutdown' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(78,44): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(86,14): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(86,14): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(86,3): error C2146: syntax error: missing ';' before identifier 'on_activate' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(86,44): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(94,16): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(94,16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(94,3): error C2146: syntax error: missing ';' before identifier 'on_deactivate' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(94,46): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(102,11): error C2433: 'CallbackReturn': 'virtual' not permitted on data declarations (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(102,11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(102,3): error C2146: syntax error: missing ';' before identifier 'on_error' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(102,41): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106,26): error C2588: '::~LifecycleNodeInterface': illegal global destructor (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106,4): error C2575: 'LifecycleNodeInterface': only member functions and bases can be virtual (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106,29): error C2491: 'rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface': definition of dllimport function not allowed (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106,30): warning C4508: 'rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface': function should return a value; 'void' return type assumed (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(110,1): error C2059: syntax error: '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(110,1): error C2143: syntax error: missing ';' before '}' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/managed_entity.hpp(23,1): error C2143: syntax error: missing ';' before '{' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/managed_entity.hpp(23,1): error C2447: '{': missing function header (old-style formal list?) (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/lifecycle_node.hpp(122,69): error C2516: 'rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface': is not a legal base class (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp(106): message : see declaration of 'rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface' (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
C:\ros2\humble\install\include\rclcpp_lifecycle\rclcpp_lifecycle/lifecycle_node.hpp(789,36): error C2653: 'LifecycleNodeInterface': is not a class or namespace name (compiling source file C:\Users\user\Desktop\ros2_ws\src\sim_ros2_control\src\sim_ros2_control_plugin.cpp) [C:\Users\user\Desktop\ros2_ws\build\sim_ros2_control\simROS2Control.vcxproj]
...

It appears that I may not be using the correct compiler, but I'm currently out of ideas on how to resolve these errors while building on Windows. Has anyone else encountered a similar issue?

Environment:

christophfroehlich commented 7 months ago

None of the core contributors use ROS 2/ ros2_control on windows afaik, that's why I don't expect we can give proper help here. Maybe you can find more people using ROS 2 on windows on https://robotics.stackexchange.com?

But please report here if you have solved your issue. We also would appreciate if you could provide installation instructions to our documentation if additional steps to https://docs.ros.org/en/rolling/Installation/Windows-Install-Binary.html are necessary. I could also think of a windows CI pipeline, it seems that github provides windows runners now. Contributions are welcome!

christophfroehlich commented 1 month ago

May be solved with https://github.com/ros-controls/ros2_controllers/issues/1053

GilmarCorreia commented 1 month ago

Thank you @christophfroehlich, I will test it!