Подтвердить что ты не робот

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

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

./config -m32 

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

4b9b3361

Ответ 1

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

setarch i386 ./config -m32

Ответ 2

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

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

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

./Configure -m32 linux-generic32

Ответ 3

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

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

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

./Configure solaris-x86-cc --shared

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

./Configure linux-generic32 --shared

Ответ 4

Чтобы получить 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 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

Бинго!

Ответ 5

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

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

Ответ 6

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