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

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

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

  • Ошибка при загрузке разделяемых библиотек
  • Как перекомпилировать пакет Debian с -O?
  • Является ли это целесообразным преобразование в LVM и отдельное / домашнее крепление?
  • Настройка репозитория Gentoo на хосте Debian
  • Установите более старую версию GLibc на RHEL
  • Кросс-исполняемые двоичные файлы
  • Первым шагом является «Перекомпилировать 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 выше работы? Есть ли у меня какая-либо надежда на достижение этой цели без полной переустановки?

  • Gentoo: пакет `glib-2.0` не найден
  • Python теперь считает, что аргументы являются файлами: Broken emerge, pip, livestreamer и большинство инструментов с использованием Python
  • Почему slowusb и скандал?
  • Обновление GCC на Debian Wheezy для поддержки возможностей C ++ 11
  • Псевдоним из .bash_profile не отражается в системе
  • Руководство по настройке Gentoo с полным шифрованием диска с использованием LUKS + LVM
  • 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 - лучшая ОС в мире.