Как мне скомпилировать openSSL в 32-битном режиме на 64-битной системе? - PullRequest
30 голосов
/ 20 октября 2011

У меня есть программа, которая в настоящее время должна быть скомпилирована в 32-битном режиме (на данный момент) и должна быть связана с версией openSSL с включенными в нее экспериментальными шифрами. Поэтому мне нужно скомпилировать 32-битный openSSL. Использование

./config -m32 

приводит к тому, что -m32 и -m64 включаются в флаги компилятора.

Ответы [ 6 ]

28 голосов
/ 27 октября 2011

Значок с камышами напомнил мне вернуться и сам на него ответить! Я получил это на работу, чтобы использовать:

setarch i386 ./config -m32
12 голосов
/ 14 января 2013

К сожалению для меня, setarch не была допустимой командой в моей LFS системе, поэтому мне пришлось делать это по-другому:

./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32

Примечание: это минимальнаяпример, чтобы заставить это работать как пожелания OP:

./Configure -m32 linux-generic32
5 голосов
/ 13 мая 2013

У меня была похожая проблема, за исключением того, что я пытался скомпилировать на машине Solaris x86.setarch недоступен в Solaris, поэтому я не мог использовать более простой подход, предложенный в одном из других ответов здесь.

Скрипт 'config' для OpenSSL - это оболочка оболочки, которая определяет, что он считает целевой системой, затем вызывает Perl-скрипт «Configure», который выполняет тяжелую работу.В Configure много встроенных целей: вы можете использовать perl Configure TABLE, чтобы получить список всех из них.Это случай выбора нужной цели из доступного списка.

Так что, если вы хотите заставить его построить цель, отличную от той, которую он считает нужной, вы можете вызвать 'Configure' напрямую, передавая название цели, которую вы хотите.Например, чтобы моя 32-битная сборка Solaris работала, я использовал:

./Configure solaris-x86-cc --shared

или, в случае первоначального вопроса, если это была система Linux, вы могли бы использовать:

./Configure linux-generic32 --shared
3 голосов
/ 07 августа 2014

Чтобы 32-битная компиляция работала на Centos 5 x64, мне нужно было выполнить и setarch и -m32, а также установить 32-битный пакет devel для glibc.

setarch i386 ./Configure --prefix=/usr linux-generic32 -m32 shared
sudo yum install glibc-devel-2.5-118.el5_10.2.i386
make

в качестве теста, чтобы убедиться, используйте команду file, чтобы увидеть, каковы результаты

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

Бинго!

0 голосов
/ 31 марта 2017

Может быть, можно будет изменить файл «config» в openssl, потому что он сначала проверит 64-битную или 32-битную ОС, и подготовит конфигурацию для ОС, например, ОС 64-битная, и мы можем изменить терминв конфигурации, как показано ниже: repace x86_64- -linux?) OUT = "linux-x86_64" ;;с x86_64- -linux?) OUT = "linux-generic32" ;;

0 голосов
/ 10 декабря 2014

Запуск ./Configure linux-generic32, а затем make CC="gcc -m32" работает для меня при компиляции Openssl-1.0.0.c на CentOS-5.5 64-битной версии.

Что касается того, как собрать 32-битное приложение на 64-битной машине, отметьте это , который дает подробные инструкции по установке необходимых 32-битных заголовочных файлов и библиотек на различные платформы.

...