当前位置: 首页 > 面试题库 >

在64位Linux OS上为32位编译程序会导致致命错误

胡劲
2023-03-14
问题内容

使用

gcc -m32 myprog.c

应该以32位版本编译该文件myprog.c

不幸的是我得到这个错误:

In file included from /usr/include/stdio.h:27:0,
                 from myprog.c:1:
/usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
#include <sys/cdefs.h>

我该如何解决?

如果我不使用-m32它,则使用64位指令。


问题答案:

要在64位Linux版本上编译32位二进制文​​件,您必须安装libx32gcc开发包和32位GNU C库

尝试这个

sudo apt-get install libx32gcc-4.8-dev

sudo apt-get install libc6-dev-i386


 类似资料:
  • 问题内容: 我有用32位汇编语言编写的程序…现在,我无法在64位OS上对其进行编译。在我们学校,它们是特定的,程序必须以32位版本编写。这是我的程序: 任何的想法?我尝试了很多方法来编译它。编译后输出错误: 输出: 问题答案: 首先将更改为并将符号更改为,然后使用链接目标文件,该文件将自动链接至该文件, 您需要这样做,因为AFAIK如果没有,就无法链接至libc。另外,在汇编时也应使用elf32而

  • 问题内容: 我有一个专有程序,试图在64位系统上使用。 当我启动安装程序时,它可以正常运行,但是在尝试更新自身并编译一些模块之后,它无法加载它们。 我怀疑这是因为它正在使用gcc,而gcc试图将它们编译为64位系统,因此该程序无法使用这些模块。 是否有任何方法(一些环境变量或类似的东西)强制gcc为32位平台执行所有操作。32位chroot可以工作吗? 问题答案: 您需要使GCC使用该标志。 您可

  • 所以我对这段代码有了一些了解: 在下面的所有内容中,我假设编译器不能对或的范围有任何先入为主的概念,初始化器仅用于上面的示例。 如果我在一个32位的整数编译器上编译这个(比如在编译x86的时候),没问题。编译器会简单地使用和作为类型值(不能进一步提升它们),乘法会简单地给出注释所说的结果(模在这种情况下是0x100000000)。 然而,如果我在一个64位整数大小的编译器上编译这个(例如x86-6

  • 在使用java程序(带有Eclipse IDE)将leap motion listener从32位windows应用到64位windows后,该程序似乎运行正常。 问题是,现在与控制器的连接已初始化,已连接,然后在我不做任何操作的情况下立即退出。 我试着把手放在控制器上,结果出错了 Java运行时环境检测到一个致命错误: pc=0x000007fee8b4a975,pid=10516时的异常访问(

  • 问题内容: 因此,标题中的问题是,我需要在32位Windows XP的系统上的Tomcat中运行我的服务器应用程序,我正在Eclipse的64位Windows 7上工作和编译。如何将其编译为32位,我需要做什么?我假设在64位计算机上编译它时,它不能在32位Windows上运行? 问题答案: Java不会构建32位或64位应用程序-字节码可在不同的位体系结构之间移植。 唯一的例外是您可能在代码中使

  • 我试图比较Peter Cordes在回答“将CPU寄存器中的所有位设置为1”的问题时提到的方法。 因此,我编写了一个基准测试,将所有13个寄存器设置为除、和之外的所有位1。 代码如下所示<代码>乘以32 nop用于避免DSB和LSD影响。 我测试了他提到的以下方法,以及这里的完整代码 为了使这个问题更简洁,我将使用替换下表中的。 下表显示,从组1到组3,当使用64位寄存器时,每个循环多1个周期。