C glib.h在64位而非32位构建中出现负数组大小错误

C glib.h在64位而非32位构建中出现负数组大小错误,c,linux,gcc,C,Linux,Gcc,我在一个开发环境中工作,在那里我们生产32位和64位 可执行文件。我有一个应用程序无法以64位模式构建。 它使用inotify并包含glib.h来获取其定义 我决定看看,如果一个最小的程序可以导致问题发生,这就是 测试的来源glibtest.c: #include <stdio.h> #include <glib.h> int main (int argc, char ** argv) { printf( "hel

我在一个开发环境中工作,在那里我们生产32位和64位 可执行文件。我有一个应用程序无法以64位模式构建。 它使用inotify并包含glib.h来获取其定义

我决定看看,如果一个最小的程序可以导致问题发生,这就是

测试的来源glibtest.c:

    #include <stdio.h>
    #include <glib.h>

    int
    main (int argc, char ** argv)
    {
        printf( "hello, I am glib test.\n\n");
    }
事物以32位模式编译,a.out打印出人们期望的内容。 现在,如果以64位模式编译,则会发生错误

    [svn/glibtest] : gcc  -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include glibtest.c
    In file included from /usr/include/glib-2.0/glib/gasyncqueue.h:34,
                     from /usr/include/glib-2.0/glib.h:34,
                     from glibtest.c:7:
    /usr/include/glib-2.0/glib/gthread.h: In function ‘g_once_init_enter’:
    /usr/include/glib-2.0/glib/gthread.h:347: error: size of array ‘type name’ is negative
    [svn/glibtest] :
在64位模式下,错误指向gthread.h这里

    #if defined (G_CAN_INLINE) || defined (__G_THREAD_C__)
    G_INLINE_FUNC gboolean
    g_once_init_enter (volatile gsize *value_location)
    {
    error>>>  if G_LIKELY ((gpointer) g_atomic_pointer_get (value_location) != NULL)
        return FALSE;
      else
        return g_once_init_enter_impl (value_location);
    }
    #endif /* G_CAN_INLINE || __G_THREAD_C__ */
我是否缺少一个必要的标题?以前有人看到过这一点并找到了解决方案吗?(是的,一年前有一篇类似的帖子没有人回复。)

Centos 6.5,“Linux tushar 2.6.32-431.17.1.el6.x86#u 64#1 SMP星期三5月7日23:32:49 UTC 2014 x86_64 x86_64#GNU/Linux” glib软件包是1:1.2.10-33。el6
gcc(gcc)4.4.7 20120313(红帽4.4.7-4)


谢谢。

/usr/lib/glib-2.0/include
通常是特定于平台的。它可能包含32位特定的定义。e、 例如,我在/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h中有以下内容:

#define GLIB_SIZEOF_SIZE_T 8

这在您的版本中可能是4,因为它似乎是32位的。

检查您是否在includes中有正确的
glibconfig.h
文件,并为您的构建目标(64位)提供了正确的设置。对于不同的目标(32位和64位),您必须具有不同的
glibconfig.h

您查看过预处理的源代码吗?例如
-e
gcc选项您似乎使用的是旧版本,是否可以安装较新版本的
glib
#define GLIB_SIZEOF_SIZE_T 8