2

您好,我正在尝试为 arm 交叉编译 systemd,但我陷入了“挂载”交叉依赖。

我设法从 util-linux 交叉编译 libmount,但无法弄清楚将它放在哪里或如何指定介子应该在哪里寻找它。

有一个 'mount-path' 选项,但即使提供它仍然说:

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 放在手臂上的方法,那就太好了。

谢谢你。

4

1 回答 1

3

Meson 使用pkg-config工具来查找依赖项。该工具使用PKG_CONFIG_PATH环境变量搜索所谓的包配置文件。您可以检查是否没有挂载

$ pkg-config --list-all

这自然是因为你刚刚编译了但是没有提供包配置文件mount.pc可以找到。检查 libmount 源,它应该包含安装过程使用的 mount.pc.in。在交叉编译的情况下,应该按照指南手动转换成mount.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

顺便说一句,这是我得到的mount.pc的内容:

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 放在手臂上的方法,那就太好了。

systemd 切换到介子,所以现在只有这样,除非你想用自动工具构建旧版本。

但是从更广泛的角度考虑,您还可以看看yocto,它专注于简化获得交叉编译的 linux 发行版。


更新

正如@Yasushi Shoji 正确指出的那样,对于交叉编译情况,应该使用PKG_CONFIG_LIBDIR代替,因为它可以防止不希望/错误地使用本地系统包,请检查this

于 2018-02-09T21:55:48.633 回答