Alterando minha arquitetura de toolchain (no gentoo)

4

Isto é um pouco específico para o gentoo, então eu explicarei nesse contexto, então tente resumi-lo em uma máquina linux genérica.

Eu acidentalmente configurei meu CHOST para "i686-pc-linux-gnu" no começo, sem prestar atenção, quando minha máquina é um Athlon64. Eu gostaria de mudá-lo para "x86_64-pc-linux-gnu". Existe um guia para isso. Não funciona.

O primeiro passo é "Recompilar binutils e recompilar o gcc"

Aqui está o problema ilustrado:

  1. Compilar binutils usando o gcc - isso é bem-sucedido ao produzir novos arquivos como, ar e semelhantes
  2. Isso quebra o gcc. O gcc agora está tentando usar o novo / usr / bin / as - mas não pode trabalhar com eles
  3. Como o gcc não pode compilar nada, não consigo compilar o gcc. Eu tenho que reverter como, ar, etc; em seguida, reverta a alteração CHOST e recompile binutils.

Então eu tentei o seguinte:

  1. backup como, ar, etc
  2. Compilar binutils, renderizando gcc inoperabe
  3. link ar, as, etc para as versões antigas das quais fiz backup
  4. tente compilar o gcc

A compilação do gcc falha com:

/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: cannot find -lc
collect2: ld returned 1 exit status

Este é um erro da glibc (completando a cadeia).

Então parece:

  1. para o gcc compilar, ele depende da nova versão glibc
  2. para o gcc rodar, o binutils deve ser a versão mais antiga

Os passos que eu não tentou, porque é tão complicado que eu queria ter opiniões primeiro, são:

  1. compilar binutils sob nova arquitetura,
  2. relink as, ar, etc para executáveis antigos
  3. compila o novo glibc com o old-gcc e o old-binutils
  4. compilar o new-gcc com o old-gcc e o old-binutils mas com o new-glibc
  5. relink as, ars, etc para new-binutils
  6. recompile tudo como um chefe

Existe alguma chance de # 4 acima de trabalhar? Tenho alguma esperança de realizar isso sem uma reinstalação completa?

    
por Tom Ritter 01.09.2010 / 23:42

3 respostas

2

Tanto quanto eu sei, não é possível. Por favor, lembre-se que o toolchain não existe no vácuo e está interligado.

O que pode funcionar é criar um compilador cruzado de nova infraestrutura, mas eu realmente duvido - a "atomicidade" na atualização da glibc quebrará tudo.

Eu aconselharia backup & reinstalação do sistema.

    
por 01.09.2010 / 23:51
2

Você já tentou baixar o tarball amd64 stage3 e usar a cópia do gcc com isso?

    
por 02.09.2010 / 02:39
1

Se o seu kernel é de 64 bits (e você pode rodar binários de 64 bits), você pode iniciar uma nova instalação x86_64 do Gentoo em um chroot, seguindo as instruções usuais. Eu fiz semelhante antes - efetivamente uma reinstalação, mas enquanto ainda está executando o sistema antigo. Se você não tiver um dispositivo de bloco sobressalente para instalar, poderá usar um subdiretório e inicializar com init=chroot0/new0/bin/sinit ou suspenso em um ambiente mínimo para embaralhar os diretórios.

Se o seu kernel é de 32 bits, encontre um kernel de 64 bits ou construa um compilador cruzado para 64 bits para criar um kernel de 64 bits, inicialize-o e veja acima.

    
por 08.01.2011 / 23:41