J'utilise un système 64 bits mais je veux un ensemble de binaires 32 bits. Quelles options dois-je passer à un script de configuration pour générer un makefile 32 bits/x86?
Passer l'argument suivant pour configurer le script m'a permis de construire la bibliothèque 32 bits sur Linux 64 bits
./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
La réponse de Jack est incomplète.
Vous avez besoin du support compilateur/libc pour la compilation 32 bits. Dans certaines distributions comme Ubuntu, ce que vous devez faire est d'installer des packages gcc-multilib
et/ou g++-multilib
:
Sudo apt-get install gcc-multilib g++-multilib
Ensuite, vous pouvez appeler configure comme vous l'avez dit, en spécifiant un hôte 32 bits et en passant des drapeaux de compilation 32 bits:
./configure --Host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
Si vous n'avez pas installé multilib, vous obtiendrez une erreur comme configure: error: C compiler cannot create executables
en passant le -m32
drapeau.
J'ai eu plus de succès en définissant un compilateur personnalisé à la place. De cette façon, tous les tests de configuration, même ceux utilisant des CFLAGS personnalisés, ont fonctionné correctement:
./configure CC="gcc -m32" CXX="g++ -m32"
Vous avez toujours besoin de versions 32 bits de toutes les bibliothèques que l'application utilise bien sûr, donc toute erreur concernant les bibliothèques manquantes fait référence à celles 32 bits.
En supposant gcc/g ++:
CPPFLAGS=-m32 ./configure ...
Une manière alternative aux choses décrites ci-dessus serait (si vous en avez) d'utiliser un compilateur x86 dédié. La ligne de configuration serait alors comme ceci (j'ai nommé les outils x86 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