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

C++ 在64位Linux操作系统上为32位编译程序会导致致命错误,c++,c,linux,ubuntu,C++,C,Linux,Ubuntu,使用 应以32位版本编译文件myprog.c 不幸的是,我得到了这个错误: gcc -m32 myprog.c 在/usr/include/stdio.h:27:0中包含的文件中, 来自myprog.c:1: /usr/include/features.h:374:25:致命错误:sys/cdefs.h:没有这样的文件或目录 #包括 我怎样才能解决这个问题 如果我不使用-m32它工作,但使用64位指令。要在64位Linux版本上编译32位二进制文件,必须安装libx32gcc开发包和32位G

使用

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

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

gcc -m32 myprog.c
在/usr/include/stdio.h:27:0中包含的文件中,
来自myprog.c:1:
/usr/include/features.h:374:25:致命错误:sys/cdefs.h:没有这样的文件或目录
#包括
我怎样才能解决这个问题


如果我不使用
-m32
它工作,但使用64位指令。

要在64位Linux版本上编译32位二进制文件,必须安装
libx32gcc
开发包和32位GNU 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>


您需要gcc多库支持。安装软件包
gcc multilib
。例如:

sudo apt-get install libc6-dev-i386

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

您可以通过将lib版本切换为64位来构建 在netbeans中 (>项目属性->C编译器->附加选项)设置为


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

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

-shared -m64
类似地,在Debian/Ubuntu系统中,您可以通过运行

yum provides '*sys/cdefs.h'
注意:如果系统上尚未存在apt文件包,请使用命令安装它

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

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

在CentOs/RHEL上

apt-get install apt-file
关于Debian/Ubuntu

yum install glibc-headers 

此方法不仅适用于此特定问题,也适用于任何类似问题,即报告某些程序包提供的某些必需文件不存在。

如果删除
-m32
标志,则程序编译良好?希望如此helps@JoachimPileborg是,如果我移除-m32工作,但是使用64位指令编译您需要安装32位开发库和头文件(该软件包通常命名为ia32 libs dev或类似名称)。是否可能需要安装包含正确头文件的32位编译器软件包?编辑:@JoachimPileborg击败了我!谢谢,顺便说一句,libc6-dev-i386将作为依赖项安装libx32gcc,因此无需手动安装:Dlibx32gcc与lib32gcc不同。libx32gcc依赖于在32位模式下运行的x86_64 CPU上的扩展。如果您针对的是纯32位intel cpu的硬盘,试图编译wine32,那么它将失败,我遇到了同样的问题。这里的提示[CODE]”/configure--libdir=/usr/local/lib32“[/CODE]对您帮助很大
apt-get install apt-file
yum install glibc-headers 
apt-get install libc6-dev