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

40

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

./config -m32 

结果是编译器标志中包含了-m32和-m64两者。

6个回答

36

飘荡的荒漠灌木徽章提醒我回来自己回答这个问题!我让它工作的方法是使用:

setarch i386 ./config -m32

21

很不幸,setarch在我的LFS系统上不是一个有效的命令,所以我必须用另一种方式来完成它:

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

注意:这是最简单的示例,以满足原帖作者的要求。

./Configure -m32 linux-generic32

8

我有一个类似的问题,只是我正在尝试在Solaris x86机器上编译。在Solaris中无法使用setarch,因此我无法使用其他答案中建议的简单方法。

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

因此,如果您想强制其构建除其认为您应该使用的目标之外的目标,则可以直接调用“Configure”,并传递您想要的目标的名称。例如,要使我的Solaris 32位版本正常工作,我使用了:

./Configure solaris-x86-cc --shared

或者,如果原问题是关于Linux系统的,你可以使用以下命令:
./Configure linux-generic32 --shared

4
为了在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

"中了!"

1
运行./Configure linux-generic32,然后在CentOS-5.5 64位版本上编译Openssl-1.0.0.c时,make CC="gcc -m32"适用于我。
关于如何在64位机器上构建32位应用程序,请查看this,其中详细介绍了在各种平台上安装必要的32位头文件和库的步骤。

0

或许我们可以修改 OpenSSL 中的 "config" 文件,因为它会首先检查操作系统是 64 位还是 32 位,并为操作系统准备配置。例如,如果操作系统是 64 位,我们可以将 config 文件中的以下术语进行修改: 将 x86_64--linux?) OUT="linux-x86_64";; 替换为 x86_64--linux?) OUT="linux-generic32";;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接