J'ai un programme qui doit actuellement être compilé en mode 32 bits (pour l'instant) et doit être lié à une version d'openSSL avec les chiffrements expérimentaux inclus. Par conséquent, je dois compiler un openSSL 32 bits. En utilisant
./config -m32
a pour résultat que -m32 et -m64 sont inclus dans les drapeaux du compilateur.
L’insigne «Tigré d’herbe» m’a rappelé de revenir et d’y répondre moi-même! Pour que cela fonctionne, j’ai utilisé:
setarch i386 ./config -m32
Malheureusement pour moi, setarch n'était pas une commande valide sur mon LFS système, je devais donc le faire différemment:
./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32
Remarque: il s’agit de l’exemple minimal pour que cela fonctionne comme vous le souhaitez:
./Configure -m32 linux-generic32
J'ai eu un problème similaire, sauf que j'essayais de compiler sur un ordinateur Solaris x86. setarch n'étant pas disponible dans Solaris, je ne pouvais donc pas utiliser l'approche plus simple suggérée dans l'une des autres réponses fournies ici.
Le script 'config' pour OpenSSL est un wrapper Shell qui détermine ce qu'il pense être le système cible, puis appelle le script Perl 'Configurer', qui effectue le gros du travail. Configure comporte de nombreuses cibles intégrées: vous pouvez utiliser 'Perl Configure TABLE' pour obtenir la liste de toutes. Il s’agit de sélectionner la cible dont vous avez besoin dans la liste disponible.
Donc, si vous voulez le forcer à construire pour une cible autre que celle qui vous semble devoir, vous pouvez appeler directement 'Configurer', en lui donnant le nom de la cible souhaitée. Par exemple, pour que ma version Solaris 32 bits fonctionne, j'ai utilisé:
./Configure solaris-x86-cc --shared
ou, dans le cas de la question initiale, s’il s’agissait d’un système Linux, vous pouvez utiliser:
./Configure linux-generic32 --shared
Pour que la compilation 32 bits fonctionne sur Centos 5 x64, je devais effectuer les opérations setarch
et -m32
, ainsi que l’installation du package de développement 32 bits pour glibc
.
setarch i386 ./Configure --prefix=/usr linux-generic32 -m32 shared
Sudo yum install glibc-devel-2.5-118.el5_10.2.i386
make
comme test pour vous en assurer, utilisez la commande fichier pour voir quels sont les résultats
file libcrypto.so.0.9.8 libssl.so.0.9.8
libcrypto.so.0.9.8: ELF **32-bit** LSB shared object, Intel 80386, version 1 (SYSV), not stripped
libssl.so.0.9.8: ELF **32-bit** LSB shared object, Intel 80386, version 1 (SYSV), not stripped
Bingo!
Peut être sera peut modifier le fichier "config" dans openssl, car il va d'abord vérifier le système d'exploitation 64 bits ou 32 bits, et préparer la configuration pour le système d'exploitation, par exemple, le système d'exploitation est 64 bits, et nous pouvons modifier le terme dans config en dessous de repace x86_64 - -linux?) OUT = "linux-x86_64" ;; avec x86_64 - - linux?) OUT = "linux-generic32" ;;
Exécutez ./Configure linux-generic32
puis make CC="gcc -m32"
fonctionne pour moi lors de la compilation de Openssl-1.0.0.c sur la version CentOS-5.5 64 bits.
Pour savoir comment créer une application 32b sur une machine 64 bits, consultez this , qui décrit en détail la procédure d’installation des fichiers d’en-tête et des bibliothèques 32 bits nécessaires sur diverses plates-formes.