c - 32 位编译在 64 位 Ubuntu 16.04 上失败

标签 c linux ubuntu gcc glib

我有一个应用程序需要使用第三方提供的 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 标志

如果您能就此问题提供任何帮助,我们将不胜感激。

最佳答案

不知道为什么 glib 不会尝试使用 int64_t 而不是复制它。对我来说似乎很傻。也许他们是故意这样做的,以便在您执行您所做的事情时增加破坏的机会,并尝试使用 64 位 glib 安装来编译 32 位代码。

要编译 32 位应用程序,您需要 32 位库对象文件 (.so)。它们将附带一个 glibconfig.h,它具有适用于 -m32 的类型定义。

安装 libglib2.0-dev:i686 应该是正确的方法。我假设您最终解决了这个问题,因此您正在构建的应用程序找到了 -I 包含路径和 -L 库路径。

关于c - 32 位编译在 64 位 Ubuntu 16.04 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935605/

相关文章:

android - Eclipse:我无法在 Ubuntu 11.10 上调试我的应用程序

java - Java C/C++项目编译IDE

从源代码编译 Lua 并用它创建 C 模块

c - 程序什么时候识别EOF?

linux - 授予 www-data 用户读取权限

linux - 使用批处理文件或 shell 脚本进行文件传输

c - 在 strftime 中使用指针目标 (C)

linux - 使用 bash/shell 在 echo 中显示 2 个变量的疯狂问题

php - 拒绝访问 PHP 文件 (Nginx)

linux - Ubuntu Linux - 插入 USB 设备时生成应用程序