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.
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
Vous avez besoin du support de gcc multilib. Installez le package gcc-multilib
. Par exemple.:
Sudo apt-get install gcc-multilib
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
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.