it-swarm.com.de

Compile-Programm für 32-Bit unter 64-Bit-Linux-Betriebssystem führt zu schwerwiegenden Fehlern

Verwenden 

gcc -m32 myprog.c

sollte in 32-Bit-Version die Datei myprog.c kompilieren.

Leider bekomme ich diesen Fehler:

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>

Wie könnte ich das beheben? 

Wenn ich -m32 nicht verwende, funktioniert es, verwendet aber 64-Bit-Anweisungen.

38
AndreaF

Um 32-Bit-Binärdateien unter 64-Bit-Linux-Version zu kompilieren, müssen Sie das libx32gcc-Entwicklungspaket und 32-Bit GNU C Library installieren

versuche dies

Sudo apt-get install libx32gcc-4.8-dev

und 

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

Sie benötigen die Unterstützung von gcc multilib. Installieren Sie das Paket gcc-multilib. Z.B.:

Sudo apt-get install gcc-multilib
10
Pedro Pedruzzi

Ich bin auf das gleiche Problem gestoßen. Als ich versuchte, eine 32-Bit-Datei zu erstellen, während ich in der 64-Bit-Ubuntu-Version bin.

sie können bauen, indem Sie Ihre lib-Version in 64 Bit umstellenin netbeans (-> Projekteigenschaften -> C-Compiler -> zusätzliche Optionen ) festlegen zu 

-shared -m64
1

Um das Problem zu beheben, müssen wir zunächst wissen, welches Paket die Datei sys/cdefs.h bereitstellt.

In CentOs/RHEL-basierten Systemen können Sie es unter folgendem Befehl finden

yum provides '*sys/cdefs.h'

In Debian/Ubuntu-Systemen können Sie es ebenfalls finden, indem Sie es ausführen

apt-file search 'sys/cdefs.h'

Note: Falls das Paket apt-file noch nicht auf dem System vorhanden ist, installieren Sie es mit dem Befehl

apt-get install apt-file

Beide obigen Befehle scannen die jeweilige Paketverwaltungssystemdatenbank, d. H. RPM/Apt, und geben den Namen des Pakets an, das die Datei liefert, die mit "sys/cdefs.h" endet.

Installieren Sie das entsprechende Paket aus den in den Befehlen aufgeführten Paketen.
Mögen

Zu CentOs/RHEL :

yum install glibc-headers 

Unter Debian/Ubuntu

apt-get install libc6-dev

Dieser Ansatz ist nicht nur für dieses spezielle Problem hilfreich, sondern auch für ähnliche Probleme, bei denen einige erforderliche Dateien gemeldet werden, die von einem nicht vorhandenen Paket bereitgestellt werden.

0
PKSingh