根文件系统的交叉编译软件

Cross-compile software for a root file system

我想为 armhf 架构交叉编译软件 (libdrm-armada)。我有包含所需共享对象的根文件系统 (~/rootfs)。该文件系统将闪存到自定义设备上的 eMMC 和 运行s 上。 Libdrm-armada 使用配置脚本生成 Makefile。当我运行./configure时,它因为找不到共享对象而退出。

--with-sysrootLD_LIBRARY_PATHLIBRARY_PATHLIBSPKG_CONFIG_LIBDIRLIBDRM_LIBS参数无效。

./configure --build=x86_64-linux --host=arm-linux\
--prefix=~/test \
LDFLAGS=-L~/rootfs/usr/lib/arm-linux-gnueabihf\
CFLAGS=-I~/rootfs/usr/include \
CC=~/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-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/;
mkdir m4; autoreconf -f -i;
./configure --build=[.. and so on ..]

请注意配置脚本会生成 Makefile。如果您 运行 上面的 ./configure 命令,错误将存储在名为 config.log.

的文件中

我找到了解决问题的方法。我必须将 --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-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

运行 make && make install 结果输出文件位于 ~/test.共享对象为ARM类型:

./lib/libdrm_armada.so.0.2.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=3b571c90a174e5a2cbc2da9496f98278ebb1a560, not stripped