Ответ 1
Значок переползания напомнил мне вернуться и ответить на него сам! Способ, которым я получил это, должен был использовать:
setarch i386 ./config -m32
У меня есть программа, которая в настоящее время должна быть скомпилирована в 32-битном режиме (на данный момент) и должна быть связана с версией openSSL с включенными экспериментальными шифрами. Поэтому мне нужно скомпилировать 32-битный openSSL. Используя
./config -m32
приводит к тому, что оба -m32 и -m64 включены в флаги компилятора.
Значок переползания напомнил мне вернуться и ответить на него сам! Способ, которым я получил это, должен был использовать:
setarch i386 ./config -m32
К сожалению для меня, setarch не была действительной командой в моей LFS, поэтому мне пришлось это делать по-другому:
./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32
Примечание: это минимальный пример, чтобы заставить его работать как пожелания OP:
./Configure -m32 linux-generic32
У меня была аналогичная проблема, кроме того, что я пытался скомпилировать на компьютере 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
Чтобы получить 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
Бинго!
Запустите ./Configure linux-generic32
, а затем make CC="gcc -m32"
работает для меня при компиляции Openssl-1.0.0.c на 64-разрядной версии CentOS-5.5.
Как создать 32-битное приложение на 64-битной машине, отметьте этот, в котором даются подробные инструкции по установке необходимых 32-битных файлов заголовков и библиотек на разных платформах.
Может быть, это может изменить файл конфигурации в openssl, потому что он сначала проверит бит 64-разрядной или 32-разрядной ОС и подготовит конфигурацию для ОС, например, ОС - 64 бит, и мы можем изменить термин в конфигурации, как показано ниже repace x86_64 - linux?) OUT = "linux-x86_64";; с x86_64 - linux?) OUT = "linux-generic32";;