web-dev-qa-db-fra.com

Comment compiler OpenSSL en mode 32 bits sur un système 64 bits?

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.

28
Gary Barker

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
26
Gary Barker

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
5
harmic

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!

2
Rmolinger

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" ;;

0
Sara Liu

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.

0
D3Hunter