您好,我试图交叉编译Systemd for Arm,但我被卡在'Mount'交叉降低上。
我设法从util-linux交叉编译libmount,但无法弄清楚在哪里或如何指定梅森应该在哪里寻找它。
有一个"坐骑"选项,但是即使提供它,它仍然说:
Meson encountered an error in file meson.build, line 797, column 0:
Cross dependency 'mount' not found
我的交叉编译文件看起来像这样:
[binaries]
c = '/usr/bin/arm-linux-gnueabi-gcc'
cpp = '/usr/bin/arm-linux-gnueabi-g++'
ar = '/usr/arm-linux-gnueabi/bin/ar'
strip = '/usr/arm-linux-gnueabi/bin/strip'
pkgconfig = '/usr/bin/arm-linux-gnueabi-pkg-config'
[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'cortex-m4'
endian = 'little'
[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'i686'
endian = 'little'
顺便说一句,如果您知道没有这种荒谬(恕我直言(设置的另一种方法使SystemD掌握了SystemD,那就太好了。
谢谢。
Meson使用 pkg-config 工具来查找依赖关系。此工具搜索所谓的 package配置文件使用 pkg_config_path 环境变量。您可以检查没有 sount in:
$ pkg-config --list-all
这很自然,因为您刚刚编译但未提供要找到的包装配置文件 mount.pc 。检查libmount源,它应包含安装过程使用的mote.pc.in。在交叉编译案件中,应根据指南手动将其转换为MANT.PC。
创建软件包配置文件后,您应该能够成功运行:
$ pkg-config --validate mount
您还可以检查变量的有效性:
$ pkg-config --cflags mount
-I/home/<>/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/libmount -I/home/<>/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/blkid -I/home/<>/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/uuid
$ pkg-config --libs mount
-lmount
btw,这是我有:
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include
Name: mount
Description: mount library
Version: 2.29.1
Requires.private: blkid
Cflags: -I${includedir}/libmount
Libs: -L${libdir} -lmount
顺便说一句 荒谬的(恕我直言(设置会很好。
SystemD切换到Meson,因此现在仅此而已,除非您想使用Autotools构建旧版本。
但是,考虑到更广泛的想法,您还可以看一下Yocto,该Yocto专注于简化进行交叉编译的Linux发行版。
update
,@yasushi shoji正确指出,对于交叉补偿案例, pkg_config_libdir 应该使用,因为它可以防止本地系统包的不良/错误使用,请检查此。
检查。