LINUX.ORG.RU

Кросс компиляция [fedora/ubuntu]->[raspbery pi]

 , , ,


0

2

Пишу утилитку для малины на c++.

На малине собирать надоело - настроил кросс-компиляцию на debian

$ gcc --version
gcc (Debian 8.3.0-6) 8.3.0

$ ldd --version
ldd (Debian GLIBC 2.28-10+deb10u1) 2.28

Дополнительно установлены

gcc-arm-linux-gnueabihf
g++-arm-linux-gnueabihf
binutils-arm-linux-gnueabihf

Сейчас понадобилось запустить кросс-компиляцию из-под fedora (gcc-12) и ubuntu (gcc-11). Это я уже потом разобрался, что версии gcc разные на целевой машине и той, где все собирается. при попытке запуска gdb выдает следущее

/lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.32' not found (required by ...

/lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.33' not found (required by ...

/lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.34' not found (required by ...

/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ...

Устанавливать более новую версию glibc на малину - не вариант, поэтому пытался установить более старый компилятор на fedora, ubuntu. И тут тупик. Как это сделать - не понятно.

В общем нужно на машине скомпилировать cmake приложение, используя кросс-компилятор определенной (8) версии.

Подскажите как это лучше сделать

инфа о малине:

$ uname
Linux 5.10.17-v7+ armv7l GNU/Linux

$ cat /etc/debian_version
10.10

$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

...

Hardware        : BCM2835
Revision        : a020d3
Serial          : 000000005e712096
Model           : Raspberry Pi 3 Model B Plus Rev 1.3

$ ldd --version
ldd (Debian GLIBC 2.28-10+rpi1) 2.28

Поставь на fedora в chroot окружение Debian, в него кросс компилятор и собирай там.

Либо другой дистрибутив, в котором есть нужное.

У тебя проблема не в версии gcc, а в версии glibc, в Fedora более новая версия glibc, которая не совместима с более старой версией glibc.

kostik87 ★★★★★
()

Скопируй со своей малинки содержимое файловой системы в ~/sysroot своего писюка. И запускай кросс gcc с опцией --sysroot=$HOME/sysroot. Ещё лучше не копировать, а распаковать нужные devel пакеты в sysroot. Но это сложнее, думать надо.

iliyap ★★★★★
()

Я использую Linaro + sysroot компилятор для таких целей. Linaro ссылка

Ставишь его в /opt и настраивает переменные:

export CROSS_COMPILE=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

export ARCH=arm

Ну а как sysroot указать при компиляции @iliyap выше уже написал

Удобно тем, что можно держать несколько разных версий компилятра и glibc.

А то если родная версия arm gcc обновиться - могут вылезти проблемы. В последнем debian обновили gcc9 -> gcc10 столько гемороя вылезло сразу.

guskov_roman
()