Кросс-компиляция программного обеспечения для корневой файловой системы
Я хотел бы кросс-компилировать программное обеспечение (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, не удален