关于Ubuntu18.04LTS编译最新版PX4源码(v1.16)出错的解决办法

一、前情提要

最近工作又要开始搞PX4的开发,正好读研时有现成的环境(Ubuntu18.04LTS),本着能不折腾就不折腾的原则,直接下载了最新版本的PX4源码进行编译测试(v1.16.0-alpha2-84-g091974e6c5),随便编了个版本(px4_fmu-v3_default)结果编译报错,报错内容如下:

/PX4-Autopilot/platforms/nuttx/NuttX/include/cxx/cmath:60:13: error: conflicting declaration of C function 'bool std::isfinite(double)'
 inline bool isfinite(double value) { return __builtin_isfinite(value); }
             ^~~~~~~~

试了老代码(v1.11)编译是ok的,所以怀疑可能是编译器的问题。多方查找解决办法并尝试,终于解决,现把解决办法分享出来以供大家参考。

二、解决办法

一言以蔽之:就是检查编译器太老了,更新即可!

在谷歌上搜索找到相同报错,这个老哥一语道破:

可以使用:

arm-none-eabi-gcc -v

查看环境中的交叉编译工具版本号,发现版本为:

gcc version 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] (GNU Tools for Arm Embedded Processors 7-2017-q4-major)

  还是2017时的版本,确实比较老了。顺着这个思路,去更新交叉编译器即可,至于如何更新,可以参考这个老哥的帖子,写的很好:

【PX4-AutoPilot教程-TIPS】Ubuntu中安装指定版本的gcc-arm-none-eabi

我把简要步骤介绍如下。

三、更新gcc-arm-none-eabi简要步骤

下载新版gcc-arm-none-eabi

官网下载:https://developer.arm.com/downloads/-/gnu-rm,以10.3-2021.10版本为例:

1、将下载好的软件包放在Desktop桌面,使用命令将其移动到opt文件夹

sudo mv ~/Desktop gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 /opt

2、解压下载的软件包

cd /opt

sudo tar -vxf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

3、安装环境依赖包

$ sudo apt-get install lsb-core
$ sudo apt-get install lib32ncurses5 lib32tinfo5 libc6-i386

4、添加环境变量到.profile 文件

sudo vim ~/.profile


4、添加环境变量到.profile 文件

sudo vim ~/.profile

在文件的最后一行空白处添加一行代码,保存后关闭。

5、更新环境变量

source ~/.profile

6、检查是否更改成功

arm-none-eabi-gcc -v

如图所示,gcc版本号与所安装的交叉编译工具版本号一致,说明更新成功。

四、make clean后重新编译新版PX4代码

可以看到编译成功了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值