Я много читал с тех пор, как впервые увидел ваш вопрос, и я отвечаю, что вы не можете запустить приложение Linux с прямым порядком байтов в ядре / дистрибутиве Linux с прямым порядком байтов.Я даже пробовал на моей Armbian системе Orangepi-PC2 aarch64, которая просто отказывалась загружать пример программы, кросс-скомпилированной с использованием ARM'latest big-endian toolchain для aarch64 .Теперь, если вы действительно не хотите преобразовывать свои данные, и если производительность не является проблемой - вероятно, это не потому, что вы хотите выполнять обработку на Raspberry-pi, а не на ПК - я бы предложил вам:
- установка qemu (на ПК с Linux или виртуальной машиной) для 64-битной платформы с прямым порядком байтов, скажем ppc64,
- установка кросс-компилятора для ppc64,
- скомпилируйте вашу программу и обработайте ваши данные.
В системе Ubuntu 18.04 вы должны выполнить следующую команду:
sudo apt-get install gcc-8-powerpc64-linux-gnu qemu
Вот небольшой пример:
Создайте двоичный файл, содержащий 64-битное число 0x1122334455667788
:
printf "\x11\x22\x33\x44\x55\x66\x77\x88"> example.dat
hexdump -C example.dat
00000000 11 22 33 44 55 66 77 88 |."3DUfw.|
00000008
Создайте эту минимальную программу, предназначенную только для демонстрации:
// example.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
// demo code only - don't do this in real life...
unsigned int value = 0;
FILE* fp = fopen("example.dat", "rb");
fread(&value, sizeof(value), 1, fp);
printf("%d\n", value);
}
Скомпилируйте ее:
powerpc64-linux-gnu-gcc-8 -static -o example example.c
Выполните это:
qemu-ppc64 ./example
0x1122334455667788
Та же программа, скомпилированная для x86_64, выдаст 0x8877665544332211
, что нормально:
gcc -o example example.c
./example
0x8877665544332211
qemu-ppc64
эмулирует ppc64,но системные вызовы выполняются вашим ядром Linux x86_64.Я надеюсь, что это поможет решить вашу первоначальную проблему.