交叉编译 GLib 软件包
交叉编译 GLib 软件包
为不同架构构建库
交叉编译是编译程序或库到与目标运行架构或操作系统不同的过程。与许多软件包相比,GLib 的交叉编译稍微困难一些,因为 GLib 很大一部分是关于隐藏不同系统之间的差异。
以下笔记涵盖了交叉编译 GLib 的特定事项;有关交叉编译的一般信息,请参阅Meson 文档。
GLib 通过不实际运行任何程序来编译和链接程序,尽可能多地检测目标系统信息;然而,有些 GLib 需要的信息无法以这种方式获得。这些信息需要通过 '交叉文件' 提供给 Meson。
以下是一个使用交叉文件的示例,为在 Linux 系统上交叉编译 'MingW32' Win64 运行环境,创建一个包含以下内容的文件 cross_file.txt
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
[properties]
c_args = []
c_link_args = []
[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
然后执行以下命令
meson setup --cross-file cross_file.txt builddir
以下列出了完整的交叉属性列表。在大多数情况下,这些属性不需要设置。
交叉属性
have_[function]
-
当 Meson 检查一个函数是否受支持时,测试可以通过将
have_function
属性设置为true
或false
来覆盖。例如检查函数“fsync” : YES
可以被以下设置覆盖
have_fsync = false
growing_stack=[true/false]
- 堆栈是向上增长还是向下增长。大多数地方都将需要
false
。一些架构,如 PA-RISC,则需要true
。 have_strlcpy=[true/false]
- 您是否有符合 OpenBSD 的
strlcpy()
。默认值为false
,这在 GLib 使用内置版本的情况下是安全的。 va_val_copy=[true/false]
- 是否可以将
va_list
作为指针复制。如果设置为false
,则使用memcopy()
。只有在你没有va_copy()
或__va_copy()
时才重要。(因此,对于 GCC 来说不重要。)默认值为true
,比false
稍微常见。 have_c99_vsnprintf=[true/false]
- 您是否有 C99 语法的
vsnprintf()
。 (C99 语法的意思是如果输出缓冲区有足够的空间,将返回原本要写入的字节数。) 默认值为false
。 have_c99_snprintf=[true/false]
- 您是否有 C99 语法的
snprintf()
。 (C99 语法的意思是如果输出缓冲区有足够的空间,将返回原本要写入的字节数。) 默认值为false
。