我正在开发32位和64位可执行文件的开发环境中工作。 我有一个应用程序无法在64位模式下生成。 它使用inotify并包含glib.h来获得定义。
我决定看看最小的程序是否会导致问题的发生。
testing的来源,glibtest.c:
#include <stdio.h> #include <glib.h> int main (int argc, char ** argv) { printf( "hello, I am glib test.\n\n"); }
build立在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__ */
我错过了一个需要的标题? 有没有人看过这个,find解决办法? (是的,一年前有一个类似的post,没有人回答。)
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(GCC)4.4.7 20120313(Red Hat 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位的。