树莓派3B安装ROS2 Rolling时报'expected ',' or '}' before '__attribute__''错误
树莓派3B编译ROS2 Rolling RMW头文件错误修复方案
错误原因
该错误为ARM32(armv7/armhf)架构下GCC编译器的语法兼容性问题,树莓派3B默认搭载的32位系统GCC版本对结构体末尾成员的__attribute__标注解析存在缺陷,宏展开后触发语法校验错误。
修复方法
方法1:修改RMW头文件宏定义(直接生效,推荐)
找到本地ROS2源码路径下的rmw/include/rmw/types.h文件,将第418行附近的宏定义替换为以下兼容写法:
#ifndef _WIN32 #define RMW_DECLARE_DEPRECATED(name, msg) __attribute__((deprecated(msg))) name #else #define RMW_DECLARE_DEPRECATED(name, msg) name __pragma(deprecated(name)) #endif
调整__attribute__标注的位置到变量名前,即可避开GCC的解析缺陷。
方法2:调整编译参数(无需修改源码)
执行colcon编译时追加GNU标准指定参数,提升兼容性:
colcon build --cmake-args -DCMAKE_C_FLAGS="-std=gnu11" -DCMAKE_CXX_FLAGS="-std=gnu++17"
方法3:升级GCC版本
如果当前系统GCC版本低于10.x,可升级到GCC 10+版本规避该问题:
sudo apt update sudo apt install -y gcc-10 g++-10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
内容的提问来源于stack exchange,提问作者ProgrammeurDeNuit
相关产品推荐
相关产品推荐

