Quelle est la différence entre gcc 32 bits et gcc 64 bits avec l’option -m32?

Mon équipe a récemment travaillé sur JNI et nous avons dû faire face à différents problèmes concernant les architectures 32 bits et 64 bits. Prenons un exemple ( temp.c ).

 #include  void main(){ printf("long=%d\n",sizeof(long)); } 

Y a-t-il une différence entre gcc_32_bit temp.c et gcc_64_bit -m32 temp.c ?

Cas testés:

Cas 1: code compilé sur ubuntu 64 bits en utilisant gcc temp.c Sortie: long=8 sur ubuntu 64 bits.

Cas 2: code compilé sur ubuntu 64 bits avec gcc -m32 temp.c Sortie: long=4 sur ubuntu 64 bits.

Cas 3: code compilé sur MAC 64 bits (compilateur croisé 64 bits utilisé ) utilisant /usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc temp.c Sortie: long=8 sur ubuntu 64 bits.

Cas 4: code compilé sur MAC 64 bits ( compilateur croisé 32 bits utilisé ) utilisant /usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc temp.c Sortie: Error: cannot run sur ubuntu 64 bits.

Nous utilisons le compilateur MAC cross car nous n’avons pas de machine Linux 32 bits.

Cela peut sembler un peu bizarre, mais ça a commencé à sortir de nulle part.

Comme amdn a posté dans les commentaires ci-dessus, cela pourrait être dû à une bibliothèque manquante pour 32 bits. Comme il ne fonctionnait pas plus tôt, j’ai installé gcc-multilib et quelques mises à jour automatiques d’Ubuntu et il a commencé à fonctionner.

Merci à tous pour votre aide précieuse.