web-dev-qa-db-fra.com

Le programme de compilation pour système d'exploitation Linux 32 bits sur 64 bits provoque une erreur irrécupérable

En utilisant 

gcc -m32 myprog.c

devrait compiler en version 32 bits le fichier myprog.c.

Malheureusement, j'obtiens cette erreur:

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>

Comment pourrais-je résoudre ce problème? 

Si je n'utilise pas -m32 cela fonctionne mais utilise des instructions 64 bits.

38
AndreaF

Pour compiler des fichiers binaires 32 bits sur une version Linux 64 bits, vous devez installer le package de développement libx32gcc et la bibliothèque C GNU 32 bits

essaye ça

Sudo apt-get install libx32gcc-4.8-dev

et 

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

Vous avez besoin du support de gcc multilib. Installez le package gcc-multilib. Par exemple.:

Sudo apt-get install gcc-multilib
10
Pedro Pedruzzi

J'ai rencontré à ce même problème. quand j'essayais de construire 32 bits afin de fichier alors que je suis dans la version 64 bits d'ubuntu.

vous pouvez construire en passant votre version de lib en 64 bitin netbeans (-> propriétés du projet -> compilateur C -> options supplémentaires ) set à 

-shared -m64
1

Pour résoudre le problème, nous devons d’abord savoir quel paquet fournira le fichier sys/cdefs.h

Dans le système basé sur CentOs/RHEL, vous pouvez le trouver en exécutant la commande ci-dessous.

yum provides '*sys/cdefs.h'

De même, dans les systèmes Debian/Ubuntu, vous pouvez le trouver en exécutant

apt-file search 'sys/cdefs.h'

Note: Si le paquet apt-file n'est pas déjà présent sur le système, installez-le avec la commande

apt-get install apt-file

Les deux commandes ci-dessus analysent la base de données de systèmes de gestion de paquets respective i.e RPM/Apt et indiquent le nom du paquet qui fournit le fichier se terminant par "sys/cdefs.h".

Installez le package approprié à partir des packages répertoriés par les commandes.
Comme

Sur CentOs/RHEL :

yum install glibc-headers 

Sur Debian/Ubuntu

apt-get install libc6-dev

Cette approche est non seulement utile pour ce problème particulier, mais également pour tout problème similaire signalant qu'un fichier requis est fourni par un package absent.

0
PKSingh