Как мне скомпилировать openSSL в 32-битном режиме в 64-битной системе?

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

./config -m32 

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


person Gary Barker    schedule 20.10.2011    source источник


Ответы (6)


Значок перекати-поле напомнил мне, что я должен вернуться и ответить на него сам! Я заставил это работать следующим образом:

setarch i386 ./config -m32
person Gary Barker    schedule 27.10.2011

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

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

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

./Configure -m32 linux-generic32
person Iskren    schedule 14.01.2013

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

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

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

./Configure solaris-x86-cc --shared

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

./Configure linux-generic32 --shared
person harmic    schedule 13.05.2013

Чтобы 32-битная компиляция работала на Centos 5 x64, мне пришлось сделать как setarch, так и -m32, а также установить 32-битный пакет разработки для 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

Бинго!

person Rmolinger    schedule 07.08.2014

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

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

person D3Hunter    schedule 10.12.2014

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

person Sara Liu    schedule 31.03.2017