gpt4 book ai didi

c - 64 位但不是 32 位构建中的 glib.h 负数组大小错误

转载 作者:IT王子 更新时间:2023-10-29 00:44:53 27 4
gpt4 key购买 nike

我在开发环境中工作,我们同时生产 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 位模式下构建...

    [svn/glibtest] : gcc glibtest.c -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -m32
[svn/glibtest] : a.out
hello, I am glib test.

[svn/glibtest] :

事物在 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__ */

我是否缺少所需的 header ?有没有人见过这个并找到了解决方案? (是的,一年前有一个类似的帖子,但没有人回答。)

Centos 6.5,'Linux tushar 2.6.32-431.17.1.el6.x86_64 #1 SMP Wed May 7 23:32:49 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux'glib 包是 1:1.2.10-33.el6
海合会 (GCC) 4.4.7 20120313 (红帽 4.4.7-4)

谢谢。

最佳答案

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

#define GLIB_SIZEOF_SIZE_T 8

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

关于c - 64 位但不是 32 位构建中的 glib.h 负数组大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541180/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com