Изменение архитектуры инструментальной цепочки (в gentoo)

Это несколько специфично для gentoo, поэтому я объясню это в этом контексте, а затем попытаюсь отвлечь его на общую машину Linux.

Я случайно установил свой CHOST на «i686-pc-linux-gnu» в начале, не обращая внимания, когда моя машина Athlon64. Я хотел бы изменить его на «x86_64-pc-linux-gnu». Для этого есть руководство. Это не работает.

Первым шагом является «Перекомпилировать binutils, затем перекомпилировать gcc»

Вот проблема:

  1. Компилировать binutils с помощью gcc – это приводит к созданию новых файлов as, ar и подобных файлов
  2. Это разрушает gcc. gcc теперь пытается использовать новый / usr / bin / as, но он не может работать с ними
  3. Поскольку gcc не может скомпилировать ничего, я не могу скомпилировать gcc. Я должен вернуться, как, ar и т. Д .; затем верните изменение CHOST и перекомпилируйте binutils.

Поэтому я попробовал следующее:

  1. резервное копирование как, ar и т. д.
  2. Компилировать binutils, отказываясь от gcc inoperabe
  3. link ar, as и т. д. к старым версиям, которые я поддерживал
  4. попытайтесь скомпилировать gcc

Сбой компиляции gcc:

/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 

Это ошибка glibc (завершение цепочки).

Ну, это похоже:

  1. gcc для компиляции имеет зависимость от новой версии glibc
  2. Для запуска gcc binutils должна быть более старой версией

Шаги, которые я не пробовал, потому что это так сложно, я хотел сначала узнать мнение:

  1. компилировать binutils под новую архитектуру,
  2. relink as, ar и т. д. для старых исполняемых файлов
  3. скомпилировать новый glibc со старыми gcc и old-binutils
  4. компилировать new-gcc с помощью old-gcc и old-binutils, но с новым glibc
  5. relink as, ars и т. д. для new-binutils
  6. перекомпилируйте все, как босс

Есть ли шанс № 4 выше работы? Есть ли у меня какая-либо надежда на достижение этой цели без полной переустановки?

  • Host CFLAGS для перекрестной сборки GCC
  • Разница между Cross GCC и Linux GCC toolchain
  • Как правильно скомпилировать gcc toolchain с помощью специального sysroot?
  • Почему для построения ядра Android требуется инструментальная цепочка, но скомпилировать весь источник нет?
  • Какие дистрибутивные кросс-компиляционные пакетные пакеты существуют?
  • Инструменты GNU против GCC SVN?
  • Компилировать параметры для инструментальной цепочки на основе MIPS?
  • Установите пакет «ia32-libs» в Windows для использования в Linux
  • 3 Solutions collect form web for “Изменение архитектуры инструментальной цепочки (в gentoo)”

    Насколько я знаю, это невозможно. Пожалуйста, помните, что инструментальная цепочка не существует в вакцине и взаимосвязана.

    Что может сработать, это построить кросс-компилятор новой инфраструктуры, но я действительно сомневаюсь в этом – «атомарность» при обновлении glibc сломает все.

    Я бы посоветовал создать резервную копию и переустановить систему.

    Вы пробовали загрузить tar-архив amd64 stage3 и использовать копию gcc с этим?

    Если ваше ядро ​​64-разрядное (и вы можете запускать 64-разрядные двоичные файлы), вы можете запустить новую установку x86_64 Gentoo в chroot, следуя обычным инструкциям. Я уже делал подобное раньше – эффективно переустанавливать, но при этом все еще работает старая система. Если у вас нет дополнительного блочного устройства для установки, вы можете использовать подкаталог и загрузиться с init=chroot\040/new\040/bin/sinit или спуститься до минимальной среды, чтобы перемешать каталоги вокруг.

    Если ваше ядро ​​32-разрядное, найдите 64-битное ядро ​​или создайте кросс-компилятор для 64-битного для создания 64-битного ядра, загрузите его, а затем посмотрите выше.

    Linux и Unix - лучшая ОС в мире.