我的应用程序需要使用glib和第三方提供的32位库。
当我在32位Ubuntu上编译时,应用程序构建并成功运行。 但是,当我在64位Ubuntu上尝试相同时,由于以下错误而无法构建:
/usr/include/glib-2.0/glib/gtypes.h: In function ‘_GLIB_CHECKED_ADD_U64’:
/usr/include/glib-2.0/glib/gmacros.h:217:53: error: size of array ‘_GStaticAssertCompileTimeAssertion_0’ is negative
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
^
/usr/include/glib-2.0/glib/gmacros.h:214:47: note: in definition of macro ‘G_PASTE_ARGS’
#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
^
/usr/include/glib-2.0/glib/gmacros.h:217:44: note: in expansion of macro ‘G_PASTE’
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
^
/usr/include/glib-2.0/glib/gtypes.h:422:3: note: in expansion of macro ‘G_STATIC_ASSERT’
G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
^
注意:我有gcc-multilib和g ++ - multilib。
我也尝试将/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h
内的定义从8更改为4但没有成功。
我也试过安装libglib2.0-dev:i686
,但是cmake中的pkg config找不到glib。我也使用适当的-m32标志用于C,CXX和LD
非常感谢任何有关此问题的帮助。
答案 0 :(得分:0)
不知道为什么glib不会尝试使用int64_t
而不是重复它。对我来说似乎很傻。也许他们是故意这样做的,如果你做了你做的事情就增加破解的机会,并尝试使用64位glib安装编译32位代码。
要编译32位应用程序,您需要32位库对象文件(.so
)。它们将带有glibconfig.h
,其-m32
具有适当的typedef。
安装libglib2.0-dev:i686
应该是正确的方法。我假设您最终解决了这个问题,因此您正在构建的应用会找到-I
包含路径和-L
库路径。