2010-07-16 7 views
47

J'utilise un système 64 bits mais je veux un ensemble de binaires 32 bits. Quelles options dois-je passer à un script configure pour générer un fichier makefile 32bit/x86?Construire 32 bits sur Linux 64 bits en utilisant un automake configure script?

+0

Plus un. J'essaye de construire Git pour Solaris. 'uname -m' renvoie' i86pc'. Toutes les bibliothèques dépendantes, à l'exception d'une dizaine, ont mal évalué la plateforme. Seul OpenSSL l'identifie correctement comme x86_64. – jww

Répondre

59

En passant l'argument suivant pour configurer le script m'a permis de construire la bibliothèque 32bit sur Linux 64 bits

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 
+0

Ne fonctionne pas pour moi :(S'il vous plaît aidez-moi à http://stackoverflow.com/questions/13780319/cant-build-32bit-wine-on-64bit-linux – m93a

+3

Cela n'a pas fonctionné pour moi en essayant de construire Il m'a donné le message 'configure: error: le compilateur C++ ne peut pas créer d'exécutables. ' –

+2

Cette réponse est incomplète, c'est pourquoi parfois vous pouvez obtenir l'erreur" le compilateur ne peut pas créer d'exécutable "Voir ma réponse dans ce même fil – volpato

3

En supposant gcc/g ++:

CPPFLAGS=-m32 ./configure ... 
+1

Merci pour la réponse. Le script configure définit toujours le type de système de construction et le type de système hôte sur x86_64-unknown-linux-gnu. Savez-vous comment les remplacer? –

38

La réponse de Jack est incomplète.

Vous avez besoin du support compilateur/libc pour la compilation 32 bits. Dans certains distros comme Ubuntu, ce que vous devez faire est d'installer des paquets gcc-multilib et/ou g++-multilib:

sudo apt-get install gcc-multilib g++-multilib 

Ensuite, vous pouvez appeler configurer comme vous le dites, specifyiong un hôte 32 bits et le passage des drapeaux de compilation 32 bits:

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

Si vous ne l'avez pas multilib installé, vous obtiendrez une erreur comme configure: error: C compiler cannot create executables lors du passage du drapeau -m32.

+3

Certains programmes compilent 32 bits sur amd64 par défaut (par exemple, wine), peut-être en plus de 64 bits et devraient être capables de trouver multilib s'ils sont installés, ce qui ne semble pas être le cas pour OP. une chose - il devrait être '--build', pas' --host'. '--host' devrait être utilisé si et seulement si vous construisez un compilateur. Cela fonctionne toujours parce qu'il y a beaucoup de gens qui ne le font pas. RTFM et écrire des scripts qui utilisent '--host' au lieu de' --build', et les gens autotools ont cassé n assez de choses déjà. –

+0

les paquets * -multilib n'existent plus dans l'étable Debian. – Braiam

6

J'ai mieux réussi en définissant un compilateur personnalisé à la place. De cette façon, tous les tests de configure, même ceux qui utilisent CFLAGS personnalisés, a fonctionné correctement:

./configure CC="gcc -m32" CXX="g++ -m32" 

Vous devez encore les versions 32 bits de toutes les bibliothèques utilisées par l'application bien sûr, si des erreurs sur les bibliothèques manquantes font référence à les 32 bits.

1

Une alternative aux choses décrites ci-dessus serait (si vous avez) d'utiliser un compilateur x86 dédié. La ligne de configuration serait alors comme ça (j'ai nommé les x86 outils après le modèle « <toolname> -x86 »):

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure 
Questions connexes