#arm #cross-compiling
#arm #перекрестная компиляция
Вопрос:
Я работаю на компьютере ARM:
Вот /proc/cpuinfo
:
processor : 0
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 413.08
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc09
CPU revision : 0
Hardware : ARM-Versatile Express
Revision : 0000
Serial : 0000000000000000
Я пытался скомпилировать эту программу с компьютера x86:
#include <stdio.h>
int main()
{
printf("Hello world!n");
return 0;
}
Вот что я сделал для компиляции этой программы:
arm-linux-gnueabi-gcc -static my_program.c
Вот сообщение об ошибке, которое я получаю при попытке запустить его на компьютере ARM:
Синтаксическая ошибка: неожиданное слово (ожидание «)»)
и вот результат file ./a.out
./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=0e39c5694c188b0e596666fe6503909394e72f44, not stripped
Комментарии:
1. Сообщение об ошибке, скорее всего, исходит из командной строки. Используете ли вы сценарий оболочки для запуска компилятора? Или это
arm-linux-gnueabi-gcc
сценарий оболочки?2. Можете ли вы убедиться, что выполняемый вами двоичный файл предназначен для Arm?
file ./a.out
3. Вот выходные данные файла: ./a.out: 32-разрядный исполняемый файл ELF LSB, ARM, EABI5 версии 1 (SYSV), статически связанный, для GNU / Linux 3.2.0, buildId [sha1]=0520a4e554f2c337d6cf525f6a1835e5dad593de, не удален
4. Что содержит строка ‘Features’ в выходных данных для
cat /proc/cpuinfo
команды? если она действительно выглядит так:Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
, то есть она действительно содержитvfp
функции, ваш процессор действительно поддерживает аппаратную плавающую точку, и вы должны использоватьarm-linux-gnueabihf-gcc
, а неarm-linux-gnueabi-gcc
.5. Как вы запускаете программу на своей цели?