Essayer de compiler même le int main(){}
programme le plus simple ( ) avec -m32
sur un système 64 bits échoue:
$ gcc -m32 test.c
/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
Il semble que la recherche par erreur dans les mauvais répertoires -m32
soit toujours spécifiée.
libgcc-4.8-dev:i386
est installé et j'ai vérifié que les bibliothèques 32 bits se trouvent dans /usr/lib/gcc/i686-linux-gnu/4.8/
.
J'ai essayé de définir et d'exporter LD_INCLUDE_PATH
et LD_LIBRARY_PATH
en vain.
Réponses:
Tout d'abord, vous devez installer "gcc-multilib" et "g ++ - multilib"
Ensuite, votre commande actuelle fonctionnera,
la source
g++-multilib
sera également requis.libc6-dev-i386
.Pour réussir la compilation du code C en exécutables x86 32 bits dans un environnement x86_64, vous devez installer les packages supplémentaires suivants:
Après un appel de compilation comme
réussit.
la source
Ce problème se produit également lorsque la
gcc
version ne correspond pas à la version degcc-multilib
. Dans ce cas, vous devez installer la version correcte des packages multilib. Par exemple; J'utilisais la version gcc4.6
, j'ai donc dû installergcc-4.6-multilib
etg++-4.6-multilib
parce que legcc-multilib
package par défaut était pour4.8
.la source