web-dev-qa-db-fra.com

Construire 32 bits sur Linux 64 bits en utilisant un script de configuration automake?

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?

50
Jack Nock

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"
67
Jack Nock

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.

47
volpato

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.

7
Malvineous

En supposant gcc/g ++:

CPPFLAGS=-m32 ./configure ...
3
R Samuel Klatchko

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
1
Haringat