如何在64位系统上以32位模式编译openSSL?

时间:2011-10-20 11:58:19

标签: openssl 32bit-64bit

我有一个程序,目前必须以32位模式编译(现在),并且需要与包含实验密码的openSSL版本链接。因此我需要编译一个32位的openSSL。使用

./config -m32 

导致-m32和-m64都包含在编译器标志中。

6 个答案:

答案 0 :(得分:27)

风滚草徽章提醒我回来自己回答! 我使用它的方法是使用:

setarch i386 ./config -m32

答案 1 :(得分:12)

对我来说不幸的是,setarch不是我LFS系统上的有效命令,因此我必须以不同的方式执行此操作:

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

注意:这是使OP工作的最小例子:

./Configure -m32 linux-generic32

答案 2 :(得分:5)

我有一个类似的问题,除了我试图在Solaris x86机器上编译。 setarch在Solaris中不可用,所以我无法使用其他答案中建议的更简单的方法。

OpenSSL的'config'脚本是一个shell包装器,它确定它认为是目标系统的内容,然后调用'Configure'perl脚本,这将完成繁重的任务。 Configure有许多内置目标:您可以使用'perl Configure TABLE'来获取所有目标的列表。这是从可用列表中选择所需目标的情况。

因此,如果你想强制它为一个它认为应该的目标而不是你的目标,你可以直接调用'Configure',传递你想要的目标名称。例如,为了使我的Solaris 32位构建工作,我使用了:

./Configure solaris-x86-cc --shared

或者,对于原始问题,如果它是Linux系统,您可以使用:

./Configure linux-generic32 --shared

答案 3 :(得分:2)

为了使Centos 5 x64上的32位编译工作,我必须同时执行setarch-m32,以及为glibc安装32位开发包。

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

宾果!

答案 4 :(得分:0)

在CentOS-5.5 64位版本上编译Openssl-1.0.0.c时运行./Configure linux-generic32然后make CC="gcc -m32"适合我。

关于如何在64位机器上构建32b应用程序,请查看this,其中提供了有关如何在各种平台上安装必要的32位头文件和库的详细步骤。

答案 5 :(得分:0)

可能会在openssl中修改“config”文件,因为它会首先检查OS 64位或32位,并准备配置OS,例如,操作系统是64位,我们可以修改术语在配置中如下 repace x86_64- -linux?)OUT =“linux-x86_64”;; 使用x86_64 - -linux?)OUT =“linux-generic32”;;