【问题标题】:How to get "g++ -mx32" to work on RHEL 7.2如何让“g++ -mx32”在 RHEL 7.2 上工作
【发布时间】:2016-08-25 15:59:19
【问题描述】:

我是 x64_86 的新手,但由于 RedHat 在 RHEL 7.x 中放弃了对 32 位操作系统的支持,我不得不使用它。我必须编译很多代码,还没有准备好跳转到 x64(因为我不需要 64 位地址,也不想面对所有相关的移植问题)。所以我考虑过使用 -m32 和 -mx32,并决定 -mx32 对我来说是最好的路线。然而,虽然 -m32 在我的构建机器上工作正常,但当我使用 -mx32 时,我收到此错误:

In file included from /usr/include/features.h:399:0,
                 from /usr/include/string.h:25,
                 from zz.cpp:1:
/usr/include/gnu/stubs.h:13:28: fatal error: gnu/stubs-x32.h: No such file or directory
 # include <gnu/stubs-x32.h>
                            ^
compilation terminated.

我在网上搜索了解决方案,一些链接表明我必须为 g++ 和 gcc 安装一些神秘的“multilib”rpm,但是,我在任何地方都找不到这些。其他人建议我必须以 x32 模式安装 Linux 并为 x32 构建 libgcc,这听起来很极端。有什么想法或线索吗?有人真的尝试过 g++ -mx32 吗?也许它甚至不支持 RH 平台...谢谢!

附:为了让“-m32”选项起作用,我必须安装:

yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686

这个失败(yum 找不到这些 RPM)-据称这些是 -mx32 工作所必需的:

yum install gcc-multilib g++-multilib

:(

【问题讨论】:

  • 我会使用 -mx32 吗?我不认为它被广泛采用。就用-m32吧,我觉得64位寄存器对你来说不重要?
  • 也许你是对的,但我不想使用任何类型的仿真或向后兼容模式。换句话说,我希望代码在本机 x64 环境中运行,而没有 64 位地址开销。但是,如果 -mx32 更晦涩且未广泛使用,我可能会回避它并按照您的建议使用 -m32。谢谢!其他意见,有人吗?
  • 一般来说,无论使用 -mx32 是否是一个好主意,都需要安装什么才能在其上编译、链接(使用 -mx32)和运行 x32 可执行文件相对湿度 7.2?有人知道吗?我看到一些帖子,人们报告在一台机器上成功编译和执行 64 位、32 位和 x32 程序,例如:stackoverflow.com/questions/21525610/…

标签: c++ g++ redhat 32bit-64bit gnu


【解决方案1】:

Multilib 确实是你的答案,但不知道为什么你的 repo 不支持它。我通过 apt-get 安装了我的:

sudo apt-get install gcc-multilib

虽然它使用 64 位指令,但它使用 32 位 ABI,所以烦人地无法在仅支持 64 位的 WSL(Windows Linux 子系统)下运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2016-12-02
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多