Contexto
Instalei recentemente 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
em uma VM. Eu quero cross-compilar aplicativos para CPUs Cortex-M4F com hard floating points , portanto, instalei o pacote gcc-arm-none-eabi
version 15:6.3.1+svn253039-1build1
, bem como libnewlib-arme-none-eabi
na versão 2.4.0.20160527-3
.
Problema
Há um erro de linker devido a um conflito entre meus arquivos de objetos usando hard floats e as libs usando flutuantes suaves. Algumas pesquisas indicam que este é um problema conhecido do Ubuntu 18.04:
Observe que eu forneço os sinalizadores de compilador e linker corretos, e este projeto é compilado corretamente com o conjunto de ferramentas cruzadas do Windows de GNU ARM Embedded . Eu acho que seria inútil colar aqui o erro completo. Se alguém achar que seria necessário, ficaria feliz em editar essa pergunta.
O que eu já tentei
A partir do meu entendimento básico, tenho duas soluções para obter uma cadeia de ferramentas funcional ARC do gcc:
- Fazer downgrade de
gcc-arm-none-eabi
para retornar a uma versão de trabalho
- Remova
gcc-arm-none-eabi
e instale gcc-arm-embedded
do PPA do time gcc da ARM ( Instalar o gcc-arm-embedded a partir do PPA )
Desclassificação do gcc-arm-none-eabi, mas para quê?
Para fazer o downgrade de gcc-arm-none-eabi
, preciso encontrar uma versão anterior no meu gerenciador de pacotes. Primeiro atualizei a lista de pacotes com sudo apt update
, depois digitei:
sudo apt show gcc-arm-none-eabi
Package: gcc-arm-none-eabi
Version: 15:6.3.1+svn253039-1build1
Priority: extra
Section: universe/devel
Origin: Ubuntu
Maintainer: Ubuntu Developers
Original-Maintainer: Agustin Henze
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 307 MB
Depends: 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
Recommends: libnewlib-arm-none-eabi
Homepage: http://gcc.gnu.org/
Download-Size: 24.3 MB
APT-Sources: http://ch.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
Description: GCC cross compiler for ARM Cortex-A/R/M processors
Bare metal compiler for embedded ARM chips using Cortex-M, Cortex-R and
Cortex-A processors.
This package is based on the GNU ARM toolchain provided by ARM.
Lá, não vejo nenhuma versão anterior. Eu acho que eles deveriam estar listados aqui, mas eu não vejo isso. Não posso fazer downgrade se não puder fornecer a versão anterior exata para a qual quero fazer o downgrade.
Usando o gcc-arm-embedded em vez do gcc-arm-none-eabi
Eu segui as instruções dadas no link acima, o que me levou a esses comandos:
sudo apt remove gcc-arm-none-eabi
sudo apt-add-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
[...] 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]
Reading package lists... Done
E: The repository 'http://ppa.launchpad.net/team-gcc-arm-embedded/ppa/ubuntu bionic Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
sudo apt-install gcc-arm-embedded
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gcc-arm-embedded
Basicamente, parece que tenho problemas para acessar o PPA. Eu tentei o apt
switch --allow-unauthenticated
mas ele não alterou a saída dos comandos.
Pergunta
Existe uma maneira de fazer uma dessas duas soluções funcionar, ou existe outra maneira de obter uma funcional toolchain do gcc no Ubuntu 18.04 para criar uma aplicação hard-float para a CPU Cortex-M4F?
(publiquei recentemente um SO pergunta sobre esta questão, neste momento eu pensei que era um problema de toolchain não tão relacionado com o mundo Unix. Se eu receber uma resposta aqui eu vou fechá-lo e redirecionar para este Q / A)