![]() |
![]() |
![]() |
GLib参考手册 | ![]() |
---|
交叉编译GLib软件包交叉编译GLib软件包 — 如何交叉编译GLib |
编译出来的程序或库将在不同的平台或操作系统上运行时, 这种编译过程就叫做交叉编译。 GLib和一些常见软件包的交叉编译稍微有些不同, 因为GLib需要隐藏不同系统之间的一些差异。
下面说明一些GLib交叉编译时的特殊之处, 一般的交叉编译信息请查看 autoconf 信息页。
GLib在编译和链接时会努力去尝试检测尽可能多的有关 目标系统的信息。但是,GLib需要的一些信息不是通过 这种方式的。这些信息通过一个"cache"文件提供给配置 (configure)脚本或者通过设置环境变量的方式实现。
作为一份示例的cache文件,用于在Linux系统上采用"MingW32"交叉 编译可运行于Win32环境中的GLib。 创建一个名为"win32.cache"的文件,包含以下内容:
glib_cv_long_long_format=I64 glib_cv_stack_grows=no
接着执行以下命令:
PATH=/path/to/mingw32-compiler/bin:$PATH chmod a-w win32.cache # prevent configure from changing it ./configure --cache-file=win32.cache --host=mingw32
下面列出了cache文件的全部变量。其中一些变量通常并不需要设置。
glib_cv_long_long_format=[ll/q/I64].
为64位整形数而使用于printf()
和scanf()
函数的格式化部分。
"ll"是C99的标准,
被'trio'库使用来编译GLib,
如果你的printf()
函数不能胜任的话。
如果你正在编译使用trio的话是不需要设置的。
glib_cv_stack_grows=[yes/no]. 堆栈是否向上或向下增长。大多数地方都需要设置为"no", 有几个体系结构,如PA-RISC等需要设置为"yes"。
glib_cv_working_bcopy=[yes/no].
bcopy()
函数是否可以处理重叠的复制。
如果你没有memmove()
, 就需要设置。(可能性非常小)
glib_cv_sane_realloc=[yes/np].
是否realloc()
函数符合ANSI C标准并能够处理第一个参数为NULL
的情况。
默认为"yes", 你可能并不需要设定它。
glib_cv_have_strlcpy=[yes/no].
是否有匹配OpenBSD的strlcpy()
函数。
默认值为"no",这是安全的,因为在这种情况下GLib使用内置的版本。
glib_cv_va_val_copy=[yes/no].
va_list是否可以作为指针复制。
如果设置为"no",那么memcopy()
将被使用。
如果你没有va_copy()
或__va_copy()
会有问题。(所以,GCC不存在问题。)
默认为"yes",这种情况比"no"要多一些。
glib_cv_rtldglobal_broken=[yes/no]. 是否在OSF/1 v5.0中发现存在有bug。默认为"no"。
glib_cv_uscore=[yes/no].
通过dlsym()
函数时,
是否需要考虑一个下划线为前缀的符号时,
他们希望通过dlsym了()。
只需要设置如果你的系统使用dlopen()
/dlsym()
。
ac_cv_func_posix_getpwuid_r=[yes/no]. 是否你的getpwuid_r函数(在你的C库,而不是线程库)遵守POSIX规范。 接受'struct passwd **'作为最终的参数。
ac_cv_func_nonposix_getpwuid_r=[yes/no].
是否你有一些getpwuid_r()
函数的变量不能遵守POSIX规范,
但是GLib有能力去使用它(或者发生段错误)。
只有在ac_cv_func_posix_getpwuid_r
没被设置的情况下才需要设置此变量。
此变量可以安全地被设置为"no".
ac_cv_func_posix_getgrgid_r=[yes/no]. 是否你有一个getgrgid_r函数去遵守POSIX规范。
glib_cv_use_pid_surrogate=[yes/no].
是否使用setpriority()
函数在线程的PID上,
作为设置线程优先级的方式。
只有在使用POSIX线程的时候需要设置。
ac_cv_func_printf_unix98=[yes/no].
是否你的printf()
函数支持Unix98样式的%N$
位置参数。
默认为"no"。
ac_cv_func_vsnprintf_c99=[yes/no].
是否你有一个vsnprintf()
函数符合C99的。
(C99语义的意思是返回字符数,被写到输入缓存有足够的空间)。
默认为"no"。