gcc 在64位Ubuntu 16.04上32位编译失败

dly7yett  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(324)

我有一个应用程序,需要使用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。我还对C、CXX和LD使用了相应的-m32标志
任何帮助这个问题将不胜感激。

z31licg0

z31licg01#

不知道为什么glib不尝试使用int64_t而不是复制它。在我看来很愚蠢。也许他们故意这样做是为了增加崩溃的机会,如果你做了你所做的,并试图编译32位代码使用64位glib安装。
要编译32位应用程序,你需要32位库对象文件(.so),它们将附带一个glibconfig.h,其中包含适合-m32的typedefs。
安装libglib2.0-dev:i686应该是正确的方法,我假设你最终解决了这个问题,所以你正在构建的应用程序会为它找到-I包含路径和-L库路径。

x0fgdtte

x0fgdtte2#

这个工作在我的Debian 11上,安装了multiarch gtk 3-dev:i386
配置文件路径=/usr/lib/i386-linux-gnu/软件包配置;程序包配置--c标志大于k +-3.0

相关问题