您好我正在尝试交叉编译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'
顺便说一句,如果你知道如果没有这种荒谬的(恕我直言)设置就可以获得另一种手持系统的方法,那就太好了。
谢谢。
答案 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。