Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
GilmarCorreia opened this issue Jan 17, 2024 · 3 comments

Comments

@GilmarCorreia
Copy link

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:

  • OS: Windows 10
  • Version: Humble
@christophfroehlich
Copy link
Contributor

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
Copy link
Contributor

May be solved with ros-controls/ros2_controllers#1053

@GilmarCorreia
Copy link
Author

Thank you @christophfroehlich, I will test it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants