-
Notifications
You must be signed in to change notification settings - Fork 312
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
Can't build with GCC < 11 (RHEL CI build, Ubuntu 20.04...) #949
Comments
This is due to this commit 78bb0ca |
Doing "git revert 78bb0ca" solved my issue |
The rolling doesn't support 20.04 anymore. The official rolling target is 22.04. So, we will not fix this since it is not a bug. Is this correct that you are trying to do or I am missing something? For the RHEL CI there are the multitude of issues – nevertheless we don't care much about them since this build is only to help us resolve some issues on the build farm. |
Well, I was only talking about reverting that commit for the humble branch, not for the rolling branch. It's ok and well understood from my side that rolling branch should evolve without care of any older distro. |
I think we could consider reverting that for Humble... |
Thank you! I close this one then :) |
I also pushed a release so it should be available with the next sync |
Jetson nano (tegra) runs 20.04, which in my case uses hardware_interface::ActuatorInterface is required. No way to upgrade to 22.04 without loosing GPU acceleration, out of 469 packages of iron-ros on arm64 the only one need to be changed is hardware_interface, just because GCC 9.4 lacks support of std::from_chars double version. This insignificant function can be easily replaced with strtod, attached patches. I can prepare pull request, using strtod or std::stod, let me know if this is welcomed |
I do not understand your logic, The hardware_interface can run with minor changes (9 lines of code change, see the diffs) on 20.04 or any other system with older GCC. All other iron packages listed at https://raw.githubusercontent.com/ros2/ros2/iron/ros2.repos and all iron ros_control packages are compiling without any problem on ARM64 GCC 9.4. The dissection to convert to std::from_chars, makes this package unavailable on a non main stream hardware (which some robot are made of) defeating one of the purpose of open source software, legacy support, nothing major is achieved using std::from_chars. I am using iron AMD64 for development and iron ARM64 for deployment, while using Cuda on both hardware's, I do not want to look back on the EOL foxy, just because one package decide to use a function that does not exist on older GCCs. So I changed the code made it run and shared the code back for others that have older hardware / older compilers but want to use current iron/humble ROS distributions. |
Dear @mory831 ,
@traversaro made a point in robotology/idyntree#288 against In all cases the solution was to use something else than |
Just to clarify: I am super-pro std::from_chars_result from_chars_xml(const char* first,
const char* last, double& value,
std::chars_format fmt = std::chars_format::general)
{
const char* new_first = first;
if (first != nullptr && first != last)
{
if (*first == '+')
{
new_first++;
}
}
return std::from_chars(new_first, last, value, fmt);
} @francesco-romano was the one originally spotting this, so perhaps in the meanwhile he found other discrepancy between XML and C++. |
Just for sake of clarity I think that @mory831 and @paulm-planted in #921 (comment) do have a real good point for backportability with constrained hardware (even so another part of the problem is the lack of support from the companies providing the hardware) . But putting back A simple solution would be to use locally the solution from MoveIt 2 with: It would not add too much to the code to maintain. |
Due to the mentioned changes, ros2_control for Iron is not compatible to Debian Bullseye (11), but should according to REP-2000. Can we find a solution for that? |
If you look at the humble branch, and for example this CI trace, there is an error in compiling
hardware_interface
becausestd::from_chars
before GCC 11 only supports integral types (no double, as needed in the code instead).The text was updated successfully, but these errors were encountered: