Meson交叉编译依赖项

时间:2018-02-08 16:29:42

标签: cross-compiling mount meson-build

您好我正在尝试交叉编译systemd for arm,但我被卡在'mount'交叉依赖性上。

我设法从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' 

顺便说一句,如果你知道如果没有这种荒谬的(恕我直言)设置就可以获得另一种手持系统的方法,那就太好了。

谢谢。

1 个答案:

答案 0 :(得分:3)

Meson使用 pkg-config 工具查找依赖项。此工具使用 PKG_CONFIG_PATH 环境变量搜索所谓的包配置文件。 您可以检查:

中没有 mount
$ pkg-config --list-all

这很自然,因为您刚刚编译但未提供要找到的程序包配置文件 mount.pc 。检查libmount源,它应该包含安装过程使用的mount.pc.in。在交叉编译的情况下,应根据guide手动将其转换为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切换到meson,所以现在只有这样,除非你想用autotools构建旧版本。

但是考虑更广泛,你也可以看看yocto,它专注于简化交叉编译的linux发行版。

<强>更新

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