Невозможно выполнить перекрестную сборку 32-разрядной программы сборки ARM на 64-разрядном ARM (AArch64) Ubuntu

#assembly #gcc #arm #raspberry-pi4 #ubuntu-20.04

#сборка #gcc #arm #raspberry-pi4 #ubuntu-20.04

Вопрос:

Я не могу выполнить свою программу на ассемблере в Ubuntu 20.04 64bit, установленной на моем Raspberry Pi 4.

Я создал код ассемблера с

 arm-linux-gnueabihf-as -o testas.o testas.s
arm-linux-gnueabihf-gcc -o testas testas.o
  

Ввод ./testas ; echo $? в терминал дает мне в результате
bash: ./testas: No such file or directory .

Содержимое кода:

 .global main

main:
mov r0,#1
bx lr
  

Комментарии:

1. Вы уверены, что ввели, ./testas а не .testas как указано в сообщении об ошибке? Обратите также внимание, что сборка собрана, не скомпилирована. И, наконец, обратите внимание, что ваша вторая команда напрямую генерирует двоичный файл из исходного файла сборки, что исключает любую необходимость в первом создании объектного файла.

2. Вы запускали arm-linux-gnueabihf-gcc и ./testas на рабочем столе x86-64? Этот код сборки ARM 32-разрядный, а не ARM64, он же AArch64, поэтому уточните, что вы подразумеваете под «64-разрядной Ubuntu». У вас действительно установлен Ubuntu 20.04 на вашем RPi? Я получаю аналогичное /lib/ld-linux.so.3: No such file or directory сообщение, если пытаюсь запустить вывод arm-linux-gnueabi-gcc на моем рабочем столе Ubuntu x86-64. (Потому что у меня установлен qemu-binfmt, поэтому он пытается запустить QEMU на нем).

3. Спасибо за ваш ответ. да, я установил Ubuntu 20.04 на свой RPi. Есть ли какой-либо способ выполнить 32-разрядный ассемблерный код на arm64?

4. Хорошо, это исключает ошибку x86. Возможно, вам потребуется установить какой-то пакет gcc-multilib, IDK. Используйте file testas и / или ldd testas , чтобы увидеть, какие файлы он ищет. Или strace ./testas

5. @fuz: Операционная система изменила это; после просмотра вашего комментария я проверил, чтобы убедиться, что это была правка операционной системы, которая изменила это, прежде чем создавать свою собственную.