交叉编译根文件系统软件

时间:2019-01-10 17:30:17

标签: gcc cross-compiling ld configure rootfs

我想为armhf架构交叉编译软件(libdrm-armada)。我有包含所需共享对象的根文件系统(〜/ rootfs)。该文件系统将被刷新到eMMC上并在自定义设备上运行。 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 = [..等等..]

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

1 个答案:

答案 0 :(得分:0)

我已经找到解决问题的方法。我必须在LDFLAGS参数中添加--sysroot标志。

  

./ 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安装结果,输出文件位于〜/ test中。共享对象为ARM类型:

  

./ lib / libdrm_armada.so.0.2.0:ELF 32位LSB共享对象,ARM,EABI5版本1(SYSV),动态链接,BuildID [sha1] = 3b571c90a174e5a2cbc2da9496f98278ebb1a560,未剥离