Справочное описание GLib |
---|
Cross-компиляция пакета GLibCross-compiling the GLib Package — Как скомпилировать пакет GLib для разных платформ. |
Cross-компиляция это процесс компиляции программ или библиотек на разных архитектурах или операционных системах на которых они будут выполняться. GLib немного сложна для cross-компиляции чем большинство пакетов потому что большая часть GLib о скрытых различиях между разными системами.
Данные замечания разъясняют специфику cross-компиляции GLib; основную информацию о cross-компиляции, смотрите в autoconf info pages.
GLib попытается обнаружить как можно больше информации о целевой системе с помощью компиляции и линковки программ ничего фактически не выполняя; однако, некоторая информация необходимая GLib не доступна таким способом. Эту информацию нужно обеспечить для скрипта configure через "cache file" или с помощью настроек переменных в вашем окружении.
Как пример использования кэш файла (cache file), при cross-компиляции для "MingW32" Win32 окружения на Linux системе, создаём файл '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
Полный список переменных кэш файла следующий. Большинство из этого не нужно устанавливать в большинстве случаев.
glib_cv_long_long_format=[ll/q/I64].
Формат используемой printf()
и
scanf()
для 64 bit целых. "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].
Имеете ли вы strlcpy()
соответствующую
OpenBSD. По умолчанию "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. По умолчанию "no".
glib_cv_uscore=[yes/no].
Нужно ли подчёркивание перед символами при поиске их
через 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
(or might segfault.) Нужно установить только если
ac_cv_func_posix_getpwuid_r
не установлен.
Безопасней устанавливать в "no".
glib_cv_use_pid_surrogate=[yes/no].
Используется ли setpriority()
в PID
нити как метод для настройки приоритетов нитей (threads). Устанавливается только
при использовании POSIX threads.
ac_cv_func_printf_unix98=[yes/no].
Поддерживает ли ваше семейство printf()
стиль Unix98
%N$
параметров позиционирования. По умолчанию "no".
ac_cv_func_vsnprintf_c99=[yes/no].
Имеете ли вы vsnprintf()
с семантикой C99
(C99 семантика означает возвращение количество байт
которые должны быть записаны имея буфер достаточного размера).
По умолчанию "no".