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

如何在64位系统上以32位模式编译openSSL?,openssl,32bit-64bit,Openssl,32bit 64bit,我有一个程序,目前必须在32位模式下编译(目前),需要链接到包含实验密码的openSSL版本。因此,我需要编译一个32位的openSSL。使用 ./config -m32 结果-m32和-m64都包含在编译器标志中。风滚草徽章提醒我回来亲自回答! 我实现这一目标的方法是: setarch i386 ./config -m32 不幸的是,setarch在我的系统上不是一个有效的命令,因此我必须以不同的方式执行它: ./Configure shared threads zlib-dynamic

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

./config -m32 

结果-m32和-m64都包含在编译器标志中。

风滚草徽章提醒我回来亲自回答! 我实现这一目标的方法是:

setarch i386 ./config -m32

不幸的是,setarch在我的系统上不是一个有效的命令,因此我必须以不同的方式执行它:

./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32
注意:这是使其按照OP的意愿工作的最小示例:

./Configure -m32 linux-generic32

我有一个类似的问题,除了我试图在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

为了在Centos 5 x64上运行32位编译,我必须同时执行
setarch
-m32
,并为
glibc
安装32位devel软件包

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

宾果

在CentOS-5.5 64位版本上编译Openssl-1.0.0.c时,运行
/配置linux-generic32
,然后
使CC=“gcc-m32”
对我有效

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

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