语境

语境

语境

我最近安装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 的应用程序硬浮点数,因此我安装了 package gcc-arm-none-eabiversion15:6.3.1+svn253039-1build1以及 libnewlib-arme-none-eabiat version 2.4.0.20160527-3

问题

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

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

我已经尝试过的

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

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

降级 gcc-arm-none-eabi,但是降级什么呢?

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

sudo apt show 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

[...] IGN:4http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu仿生 InRelease
获取:5http://security.ubuntu.com/ubuntu仿生安全 InRelease [83.2 kB]
错误:6http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu未找到仿生版本
404 [IP: 91.189.95.83 80]
正在读取软件包列表...完成
E: 存储库 'http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu仿生发布'没有发布文件。
N:从这样的存储库更新无法安全地完成,因此默认情况下被禁用。
N:有关存储库创建和用户配置详细信息,请参阅 apt-secure(8) 联机帮助页。

sudo apt-install gcc-arm-embedded

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

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

问题

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

(我最近发布了一个堆栈溢出问题关于这个问题,当时我认为这是一个与 Unix 世界不太相关的工具链问题。如果我在这里得到答案,我将关闭它并重定向到此问答)

答案1

您可以从以下位置下载功能工具链开发者网站并在删除现有的 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

将新包解压到您的主目录中:

tar -xjvf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2

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

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

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

检查编译器是否已安装:

gcc --version

相关内容