Кросс-компиляция программного обеспечения для корневой файловой системы - PullRequest
0 голосов
/ 10 января 2019

Я бы хотел кросс-компилировать программное обеспечение (libdrm-armada) для архитектуры armhf. У меня есть корневая файловая система (~ / rootfs), которая содержит необходимые общие объекты. Эта файловая система будет перенесена на eMMC и запущена на пользовательском устройстве. Libdrm-armada использует скрипт configure для генерации Makefile. Когда я запускаю ./configure, он завершается, потому что не может найти общие объекты.

Параметры --with-sysroot, LD_LIBRARY_PATH, LIBRARY_PATH, LIBS, PKG_CONFIG_LIBDIR, LIBDRM_LIBS не работают.

. / Configure --build = x86_64-linux --host = arm-linux \
--prefix = ~ / test \
LDFLAGS = -L ~ / корневой файловой системы / USR / Lib / арм-линукс-gnueabihf \
CFLAGS = -I ~ / rootfs / usr / include \
CC = ~ / НКУ-Линаро-6.3.1-2017.02-x86_64_arm-линукс-gnueabihf / бен / арм-Linux-gnueabihf-GCC

Ошибка, которую я пытаюсь устранить, отображается в config.log как:

...
configure:3269: /home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -I/home/user/rootfs/usr/include  -L/home/user/rootfs/usr/lib/arm-linux-gnueabihf conftest.c  >&5
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/libc.so.6 
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/lib/arm-linux-gnueabihf/libc_nonshared.a
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
collect2: error: ld returned 1 exit status 
...

Как правильно скомпилировать программное обеспечение и установить его в ~ / rootfs?

РЕДАКТИРОВАТЬ (спасибо Basile!):
Вы можете исследовать исходный код, проверив репозиторий git.

git clone git: //git.armlinux.org.uk/~rmk/libdrm-armada.git/;
cd libdrm-armada /;
мкдир м4; autoreconf -f -i;
./configure --build = [.. и так далее ..]

Обратите внимание, что скрипт configure генерирует Makefile. Если вы запустите команду ./configure выше, ошибка сохраняется в файле с именем config.log.

1 Ответ

0 голосов
/ 11 января 2019

Я нашел решение своей проблемы. Мне пришлось добавить флаг --sysroot в параметр LDFLAGS.

. / Configure --build = x86_64-linux --host = arm-linux \
--prefix = ~ / test \
LDFLAGS = '- L ~ / rootfs / usr / lib / arm-linux-gnueabihf --sysroot = ~ / rootfs' \
CFLAGS = -I ~ / rootfs / usr / include \
CC = ~ / НКУ-Линаро-6.3.1-2017.02-x86_64_arm-линукс-gnueabihf / бен / арм-Linux-gnueabihf-GCC

Запуск make && make install приводит к тому, что выходные файлы находятся в ~ / test. Общие объекты имеют тип ARM:

. / Lib / libdrm_armada.so.0.2.0: 32-битный общий объект LSB ELF, ARM, EABI5 версия 1 (SYSV), динамически связан, BuildID [sha1] = 3b571c90a174e5a2cbc2da9496f98278ebb1a560, не удален * 1014

...