aarch64-linux-musl-cross имеет нерабочую ссылку на ld-musl-aarch64.so.1

Вопрос или проблема

Цель

Я хочу запустить бинарный файл ARM64 Go на x86_64 Kali Linux, используя режим пользователя QEMU.

Проблема

Я получил aarch64-linux-musl-cross.

~$ wget https://musl.cc/aarch64-linux-musl-cross.tgz
~$ tar -xvf aarch64-linux-musl-cross.tgz

Затем я использовал ~/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc для компиляции простой программы Hello World на Go. Она скомпилировалась именно так, как я хотел.

~/go_projects/bin$ file hello
hello: ELF 64-битный исполняемый файл, ARM aarch64, версия 1 (SYSV), динамически связанный, интерпретатор /lib/ld-musl-aarch64.so.1, Go BuildID=-37pQ_4dEsp4pnAgj4QV/0unDR_0nE-A-DsF1SfKd/-8CRGAArG5J0XNspP2M-/u6ChmkaiRo9qoxEE15eo, не обрезанный

Но, по какой-то причине, интерпретатор ~/aarch64-linux-musl-cross/aarch64-linux-musl/lib/ld-musl-aarch64.so.1 является сломанной ссылкой на /lib/libc.so.

У меня есть файл /usr/aarch64-linux-gnu/lib/libc.so, но это всего лишь текстовый файл.

~$ file /usr/aarch64-linux-gnu/lib/libc.so
/usr/aarch64-linux-gnu/lib/libc.so: ASCII текст
~$ cat /usr/aarch64-linux-gnu/lib/libc.so
/* Скрипт GNU ld
   Используйте разделяемую библиотеку, но некоторые функции есть только в
   статической библиотеке, так что попробуйте это вторично.  */
OUTPUT_FORMAT(elf64-littleaarch64)
GROUP ( /usr/aarch64-linux-gnu/lib/libc.so.6 /usr/aarch64-linux-gnu/lib/libc_nonshared.a  AS_NEEDED ( /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 ) )

На что должна указывать ссылка ld-musl-aarch64.so.1?

Ух ты, я нашёл свой ответ сразу после публикации этого…

sudo dpkg --add-architecture arm64
sudo apt update
sudo apt install -y --no-install-recommends musl:arm64
ln -f -s /lib/aarch64-linux-musl/libc.so ~/aarch64-linux-musl-cross/aarch64-linux-musl/lib/ld-musl-aarch64.so.1

Ответ или решение

Конечно! Вот полное решение вашей проблемы:

Цель

Вы хотите запустить ARM64 Go бинарный файл на x86_64 Kali Linux, используя QEMU в пользовательском режиме.

Проблема

Вы установили кросс-компилятор aarch64-linux-musl-cross, но столкнулись с ситуацией, когда интерпретатор ld-musl-aarch64.so.1 является неработающей ссылкой на /lib/libc.so.

Решение

Интерпретатор ld-musl-aarch64.so.1 должен указывать на правильно установленный динамический линковщик (например, musl) для архитектуры ARM64. Ваша текущая установка не содержит нужного файла.

Вот шаги для решения проблемы:

  1. Добавьте поддержку архитектуры ARM64:

    Откройте терминал и выполните следующие команды:

    sudo dpkg --add-architecture arm64
    sudo apt update
  2. Установите библиотеку musl для ARM64:

    Установите минимальный набор пакетов musl, необходимый для вашего проекта:

    sudo apt install -y --no-install-recommends musl:arm64
  3. Создайте символическую ссылку на ld-musl-aarch64.so.1:

    Вам потребуется создать символическую ссылку на динамический линковщик, который будет указывать на правильный файл. Выполните следующую команду:

    ln -f -s /lib/aarch64-linux-musl/libc.so ~/aarch64-linux-musl-cross/aarch64-linux-musl/lib/ld-musl-aarch64.so.1

    Убедитесь, что путь /lib/aarch64-linux-musl/libc.so существует в вашей системе. Если он не обнаружен, это может означать, что установка musl прошла неудачно, и необходимо проверить статус установки.

Результат

После выполнения вышеуказанных шагов, вы должны иметь возможность запускать скомпилированный ARM64 Go бинарный файл с помощью QEMU без проблем, связанных с неподходящим динамическим линковщиком.

Если возникнут дополнительные вопросы или новые проблемы, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...