web-dev-qa-db-ja.com

64ビットLinux OSで32ビットのプログラムをコンパイルすると致命的なエラーが発生する

を使用して

gcc -m32 myprog.c

ファイルmyprog.cを32ビットバージョンでコンパイルする必要があります。

残念ながら、私はこのエラーを受け取ります:

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ビット命令を使用します。

38
AndreaF

64ビットLinuxバージョンで32ビットバイナリをコンパイルするには、libx32gcc開発パッケージと32ビットGNU Cライブラリをインストールする必要があります

これを試して

Sudo apt-get install libx32gcc-4.8-dev

そして

Sudo apt-get install libc6-dev-i386
78
Silverstorm

Gcc multilibサポートが必要です。パッケージをインストールするgcc-multilib。例えば。:

Sudo apt-get install gcc-multilib
11
Pedro Pedruzzi

この同じ問題に遭遇しました。 64ビットのubuntuバージョンで32ビットのファイルをビルドしようとしていたとき。

netBeansでlibバージョンを64ビットに切り替えることでビルドできます(-> プロジェクトプロパティ-> Cコンパイラ-> 追加オプションに設定

-shared -m64
1
NuOne

この問題を解決するには、まずどのパッケージがファイルを提供するかを知る必要があります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

このアプローチは、この特定の問題だけでなく、存在しないパッケージによって提供される必要なファイルを報告している同様の問題にも役立ちます。

1
PKSingh