web-dev-qa-db-fra.com

GCC - Compiler le code 32 bits sur un système 64 bits

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.

2
ruby-miner

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é).

5
steeldriver

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.

0
WinEunuuchs2Unix