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

Я хотел бы кросс-компилировать программное обеспечение (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 / Библиотека / ARM-Linux-gnueabihf \
CFLAGS = -I ~ / rootfs / usr / include \
CC = ~ / GCC-Линаро-6.3.1-2017.02-x86_64_arm-Linux-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 ответ

Решение

Я нашел решение своей проблемы. Мне пришлось добавить флаг --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 = ~ / GCC-Линаро-6.3.1-2017.02-x86_64_arm-Linux-gnueabihf / бен / рычажного Linux-gnueabihf-GCC

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

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

Другие вопросы по тегам