缺少locale_t

时间:2010-07-02 07:11:57

标签: c gtk macports osx-snow-leopard

在libintl.h第440行的最终make上安装带有macports choke的gtk 1.2(包名gtk1)。

extern locale_t libintl_newlocale (junk, stuff, stuff)

编译器找不到locale_t,我没有做得更好。

该文件导入locale.h(不存在)和xlocale.h(未定义此类型)。

locale_t应该定义在哪里?这可能就像错过的依赖一样容易,但我不知道缺少什么。

根据要求,这里是xlocale.h,减去版权,这是Open Group的。

#include <X11/Xfuncproto.h>
#include <X11/Xosdefs.h>

#ifndef X_LOCALE
#include <locale.h>
#else

#define LC_ALL      0
#define LC_COLLATE  1
#define LC_CTYPE    2
#define LC_MONETARY 3
#define LC_NUMERIC  4
#define LC_TIME     5

_XFUNCPROTOBEGIN
    extern char *_Xsetlocale(
    int /* category */,
    _Xconst char* /* name */
);
_XFUNCPROTOEND

#define setlocale _Xsetlocale

#include <stddef.h>

#endif /* X_LOCALE */

2 个答案:

答案 0 :(得分:1)

如果您不需要翻译成英语以外语言的邮件,您可以找到libintl的各种虚拟版本作为替代品。如果我没记错的话,uclibc包括一个。您也可以在某处添加typedef void *locale_t;并解决错误。

..这是错误。直到POSIX 2008,locale_t才被添加到POSIX,这比libgtk1.2更新一点;在那之前,它是一个GNU扩展。在任何情况下,由于它是一个非常新的且没有广泛支持的功能,配置应该测试它并且仅在它存在的情况下使用它。

答案 1 :(得分:0)

我在Mac OS X上遇到了同样的问题。它是<xlocale.h><X11/Xlocale.h>使用_XLOCALE_H_作为包含警卫造成的。如果包含两者,则实际上只包括其中一个。要解决此问题,我修改了/usr/include/X11/Xlocale.h并将包含保护更改为_X11_XLOCALE_H_

此问题是fixed upstream,但修复程序尚未归结为Mac OS X.