Я пытаюсь скомпилировать стек gtk (последняя версия gtk2, 2.24), и я получаю кучу ошибок, которые кажутся связанными. А именно, __locale_t
не может быть найдено из string.h и time.h, и LC_ALL_MASK
тоже не может быть найдено (должно быть в locale.h).
Я обнаружил, что все эти проблемы связаны с тем, что __USE_XOPEN2K8
не определен #. Для чего нужен __USE_XOPEN2K8
и как его правильно установить?
Например, мне нужно передать флаг в ./configure для glib, gtk, ... или мне нужно что-то изменить уже при сборке gcc или glibc̲? Я бы предпочел не просто добавлять #define __USE_XOPEN2K8
в свои источники, не зная, что он делает. Примечание. Я использую gcc-4.6.3 и glibc-2.16.0, которые установлены с нестандартным префиксом, поскольку я пытаюсь заставить библиотеки gtk работать на более старой CentOS (5.8), которая включает только более старые версии.
Также обратите внимание, что отсутствующий __locale_t
упоминается в нескольких местах, например. отчет об ошибке. Я мог бы просто добавить #include <xlocale.h>
в некоторые файлы, но кажется правильным решением было бы установить __USE_XOPEN2K8
.
Изменить: я нашел эту тему с описанием эта проблема. Судя по всему, заголовки хост-системы "включаются" в заголовки нового компилятора. Связанный пост предлагает отредактировать functions.h. Кто-нибудь знает, нужно ли мне после этого перекомпилировать gcc/glibc (и как заставить его подбирать новые feature.h, а не перезаписывать его)?
--oldincludedir
или--with-build-sysroot
могут быть в правильном направлении, но я в основном предполагаю. - person rra   schedule 18.03.2013features.h
,pthread.h
,wchar.h
,sys/stat.h
иbits/string2.h
. Насколько я могу судить, fixincludes на самом деле были breakincludes уже как минимум десять лет. - person Nemo   schedule 05.05.2020