在64位Linux操作系统上编译32位程序会导致致命错误

时间:2014-05-06 14:59:34

标签: c++ c linux ubuntu

使用

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位指令。

4 个答案:

答案 0 :(得分:78)

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

试试这个

sudo apt-get install libx32gcc-4.8-dev

sudo apt-get install libc6-dev-i386

答案 1 :(得分:11)

您需要gcc multilib支持。安装包gcc-multilib。 E.g:

sudo apt-get install gcc-multilib

答案 2 :(得分:1)

我遇到了同样的问题。当我试图在64位ubuntu版本中构建32位文件时。

您可以通过将lib版本切换为64位来构建 在netbeans ( - &gt; 项目属性 - &gt; C编译器 - &gt; 其他选项设置为

-shared -m64

答案 3 :(得分:0)

要解决此问题,我们首先需要知道哪个软件包将提供文件 sys / cdefs.h

在基于CentOs / RHEL的系统中,您可以通过运行以下命令

找到它
yum provides '*sys/cdefs.h'

同样,在Debian / Ubuntu系统中,您可以通过运行

找到它
apt-file search 'sys/cdefs.h'

注意:如果系统上尚未安装apt-file软件包,请使用命令

安装它
apt-get install apt-file

上述两个命令都将扫描相应的包管理系统数据库,即RPM / Apt,并告知提供以“sys / cdefs.h”结尾的文件的包的名称。

从命令列出的软件包安装相应的软件包 像

在CentOs / RHEL上

yum install glibc-headers 

在Debian / Ubuntu上

apt-get install libc6-dev

此方法不仅对此特定问题有用,而且报告某些包提供的某些必需文件的任何类似问题都不存在。