语境
我最近安装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-eabi
version15:6.3.1+svn253039-1build1
以及 libnewlib-arme-none-eabi
at version 2.4.0.20160527-3
。
问题
由于使用硬浮点数的目标文件和使用软浮点数的库之间存在冲突,因此出现链接器错误。一些研究表明这是一个已知的乌班图18.04(仿生海狸)问题:
请注意,我确实提供了正确的编译器和链接器标志,并且该项目使用 Windows 交叉工具链正确构建GNU ARM 嵌入式。我认为在这里粘贴完整的错误是没有意义的。如果有人认为有必要,我很乐意编辑这个问题。
我已经尝试过的
根据我的基本理解,我有两种解决方案来获得功能性的 GCC ARM 工具链:
- 降级
gcc-arm-none-eabi
以返回到工作版本 - 从团队中删除
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 时遇到了问题。我尝试了apt
switch --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