如何在 Ubuntu 18.04 (Bionic Beaver) 上安装功能强大的 ARM 跨 GCC 工具链

Tim*_*Tim 13 ubuntu arm gcc apt cross-compilation

语境

我最近安装Ubuntu 18.04, Linux foobar-VirtualBox 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux在虚拟机上。我想为带有硬浮点的Cortex-M4F CPU 交叉编译应用程序,因此我已经安装了包gcc-arm-none-eabi版本15:6.3.1+svn253039-1build1以及 libnewlib-arme-none-eabi版本2.4.0.20160527-3.

问题

由于使用硬浮点数的目标文件与使用软浮点数的库之间存在冲突,因此出现链接器错误。一些研究表明这是一个已知的Ubuntu 18.04 (Bionic Beaver) 问题:

请注意,我确实提供了正确的编译器和链接器标志,并且该项目使用来自GNU ARM Embedded的 Windows 交叉工具链正确构建。我认为在这里粘贴完整的错误是没有意义的。如果有人认为这是必需的,我很乐意编辑这个问题。

我已经尝试过的

根据我的基本理解,我有两种解决方案来获得功能性 GCC ARM 工具链:

  1. 降级gcc-arm-none-eabi以返回到工作版本
  2. 从团队 GCC ARM 嵌入式 PPA 中删除gcc-arm-none-eabi并安装(gcc-arm-embedded从 PPA安装 gcc-arm-embedded

降级 gcc-arm-none-eabi,但降级到什么程度?

为了降级,gcc-arm-none-eabi我必须在我的包管理器中找到以前的版本。我首先用 更新了包列表sudo apt update,然后输入:

sudo apt 显示 gcc-arm-none-eabi

包:gcc-arm-none-eabi
版本:15:6.3.1+svn253039-1build1
优先级:额外
部分:universe/devel
来源:Ubuntu
维护者:Ubuntu 开发者
原始维护者:Agustin Henze
错误:https://bugs.launchpad .net/ubuntu/+filebug
安装大小:307 MB
依赖:libc6 (>= 2.15)、libgcc1 (>= 1:3.0)、libgmp10、libisl15 (>= 0.15)、libmpc3、libmpfr6 (>= 3.1.3) , libstdc++6 (>= 5), zlib1g (>= 1:1.1.4), binutils-arm-none-eabi
推荐:libnewlib-arm-none-eabi
主页:http : //gcc.gnu.org/
下载大小:24.3 MB
APT 来源:http : //ch.archive.ubuntu.com/ubuntubionic/universe amd64 包
描述:用于ARM Cortex-A/R/M 处理器的GCC 交叉编译
器 用于使用Cortex-M、Cortex-R 和
Cortex-A 处理器的嵌入式ARM 芯片的裸机编译器。
该软件包基于 ARM 提供的 GNU ARM 工具链。

在那里,我没有看到任何以前的版本。我认为它们应该列在这里,但我没有看到。如果我不能提供我想降级到的确切以前的版本,我就不能降级。

使用 gcc-arm-embedded 而不是 gcc-arm-none-eabi

我按照上面链接中给出的说明进行操作,这使我获得了以下命令:

sudo apt remove gcc-arm-none-eabi
sudo apt-add-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
Run Code Online (Sandbox Code Playgroud)

[...] Ign:4 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic InRelease
Get:5 http://security.ubuntu.com/ubuntu bionic-security InRelease [ 83.2 kB]
Err:6 http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic Release
404 Not Found [IP: 91.189.95.83 80]
阅读包列表......完成
E:存储库“ http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic Release”没有发布文件。
N:无法安全地从此类存储库进行更新,因此默认情况下禁用。
N:有关存储库创建和用户配置详细信息,请参阅 apt-secure(8) 联机帮助页。

sudo apt-install gcc-arm-embedded
Run Code Online (Sandbox Code Playgroud)

读取包列表...完成
构建依赖树
读取状态信息...完成
E:无法定位包 gcc-arm-embedded

基本上,我似乎在访问 PPA 时遇到了问题。我试过aptswitch --allow-unauthenticated,但它没有改变命令输出。

有没有办法让这两个解决方案中的一个起作用,或者有没有另一种方法可以在 Ubuntu 18.04 上获得功能性 GCC 工具链来为 Cortex-M4F CPU 构建硬浮动应用程序?

(我最近在这个问题上发布了一个 Stack Overflow问题,因为此时我认为这是一个与 Unix 世界不太相关的工具链问题。如果我在这里得到答案,我将关闭它并重定向到这个 Q/一种)

小智 5

您可以从developer.arm.com下载功能工具链,并在删除现有的 gcc-arm-none-eabi 包后手动安装它。

转到该网站,单击“下载”按钮并获取: gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2。将其保存在您的主目录中。

确保您已卸载旧的 Ubuntu 软件包。

sudo apt remove binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi
Run Code Online (Sandbox Code Playgroud)

在您的主目录中解压新包:

tar -xjvf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2
Run Code Online (Sandbox Code Playgroud)

将新工具链添加到您的路径中:

export PATH=$PATH:/home/(your user)/gcc-arm-none-eabi-7-2018-q2-update/bin/
Run Code Online (Sandbox Code Playgroud)

此时您应该有一个可以工作的 ARM 编译器和工具链。(对于 Unix 新手:如果您关闭终端并打开一个新终端,则必须重新运行该export PATH语句,以便编译器再次被接收。)