J'étudie Assembly et j'ai besoin de compiler un morceau de code C dans un fichier exécutable de 32 bits. Le problème est que je continue à avoir cette erreur. J'ai essayé d'installer gcc-multilib et g ++-lib, mais cela ne m'a pas aidé. Quelqu'un sait ce qui pourrait se passer?
> gcc main.s -m32 -o main
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
Utilisation de gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu4) sur Ubuntu 16.10.
Mise à jour: Ajout de la commande de compilation. J'ai préalablement compilé le fichier .s en utilisant gcc -m32 -S main.c
parce que je devais consulter le code de l'assembly.
Le package gcc-multilib
fournit uniquement une prise en charge 32 bits du compilateur par défaut actuel.
Puisque vous utilisez un compilateur autre que celui par défaut (gcc-4.8
par rapport au système par défaut gcc-6
], vous devez installer le package multilib sous-jacent spécifique à la version de manière explicite, par exemple.
Sudo apt install gcc-4.8-multilib
(ou l’équivalent de votre gestionnaire de paquets préféré).
Cette réponse de notre site soeur Débordement de pile : Comment compiler un fichier 32- bit binaire sur une machine Linux 64 bits avec gcc/cmake :
export CFLAGS=-m32
La question a 117 votes positifs et la réponse acceptée en compte 117.
Maintenant, les deux ont 118 après moi.