64位Win7下用VS2010编译OpenSSL

本文提供了详细的步骤指南,包括下载、安装相关软件、配置环境、编译OpenSSL库以及验证其64位特性,旨在帮助开发者在Windows系统上成功部署并使用OpenSSL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        首先要说明,如果不想自己编译OpenSSL,可以到 http://slproweb.com/products/Win32OpenSSL.html 去下载安装已经编译好的文件。
        本文中将要用到的软件如下:
1) 64 位 Win7 sp1专业版;
2) Perl,这里用的是 ActivePerl 5.14.2.102(64位版),安装在 E:\Perl64\ 路径下;
3) OpenSSL 1.0.1c, 解压后文件放在目录 F:\openssl\  下,该目录下应该有apps,bugs,certs等子目录和其他一些文件。注意下载 OpenSSL 以后解压缩最好把文件放在英文路径下,路径中最好不要有非英文字符、空格等特殊符号。
4) Visual Studio 2010,安装目录为 E:\Microsoft Visual Studio 10.0\
        这里将要编译 64 位的库文件,所以应该先仔细阅读 openssl 目录下的INSTALL.W64文件。如果需要编译出 32 位的库文件,应该阅读 openssl 目录下的 INSTALL.W32 文件。
        检查perl相关文件是否被添加到环境变量,在命令行窗口中执行Path,结果应该为:PATH=E:\Perl64\site\bin;E:\Perl64\bin; ... (其他路径被省略)

        启动VS2010命令行窗口,在“开始”菜单 Visual Studio 2010 中选择Visual Studio Tools,在其中选择Visual Studio x64 Win64命令提示(2010),注意不要选择Visual Studio x64 Win64兼容工具命令提示(2010),也不要选择Visual Studio IDE里面“工具”菜单中的"Visual Studio命令提示",进入那个命令窗口以后使用的默认编译器是32位而不是64位编译器。也可以在命令行窗口中,进入目录 E:\Microsoft Visual Studio 10.0\vc\bin\amd64\ ,执行命令 vcvar64.bat。

 (如果想要编译出32位的库文件,在“开始”菜单 Visual Studio 2010 中选择Visual Studio Tools,在其中选择Visual Studio 命令提示(2010)。或者在命令行窗口中,进入目录 E:\Microsoft Visual Studio 10.0\VC\bin\ ,执行vcvars32.bat。)

       进入Openssl文件所在目录 F:\openssl\ ,执行下面的命令:
perl Configure VC-WIN64A
ms\do_win64a
nmake -f ms\ntdll.mak
nmake -f ms\nt.mak

注意:

1)  nmake -f ms\ntdll.mak命令生成动态链接库,输出内容在\openssl\out32dll目录下。
     nmake -f ms\nt.mak命令生成静态链接库,输出内容在\openssl\out32目录下。 

2) 如果要编译出32位的库,执行的命令有所不同,用不到汇编时应该使用下面的命令:

perl Configure VC-WIN32 no-asm

ms\do_ms

nmake -f ms\ntdll.mak
nmake -f ms\nt.mak

    如果用到汇编,并且使用NASM(官网是:http://www.nasm.us/),应该执行下面的命令

perl Configure VC-WIN32

ms\do_nasm

nmake -f ms\ntdll.mak
nmake -f ms\nt.mak

3) perl Configure VC-WIN64A 命令中 Configure这个字符串中的字母大小写一个也不能错!否则后面编译会出问题。

4) 可以使用--prefix=...来指定openssl编译好以后的安装路径,比如要安装到 F 盘的 openssl 目录下,命令为:

 perl Configure VC-WIN32 --prefix=F:/openssl

5)  可能用到以下命令

     编译动态库:    nmake -f ms\ntdll.mak

     测试动态库:    nmake -f ms\ntdll.mak test
     编译静态库:    nmake -f ms\nt.mak     测试静态库:    nmake -f ms\nt.mak test

     清除上次动态库的编译,以便重新编译:    nmake -f ms\ntdll.mak clean
     清除上次静态库的编译,以便重新编译:    nmake -f ms\nt.mak clean

6) 在include 子目录下存放相关的 .h 头文件,在 out32 和 out32dll 子目录下都有 openssl.exe 文件,out32 目录下存放静态库文件:libeay32.lib (大小为13213KB)和 ssleay32.lib 文件(大小为1859KB),out32dll 目录下存放动态库及相关文件:libeay32.dll, libeay32.lib (大小为762KB)和 ssleay32.dll, ssleay32.lib (大小为65KB)文件。

        尽管 out32 和 out32dll 两个目录下有同名文件ssleay32.lib, libeay32.lib, 但它们的文件体积不同,显然是有区别的。out32 目录下的 lib 文件是静态库文件,out32dll 目录下的 lib 文件是同名 dll 动态库文件对应的引入库文件。引入库文件中包含的是对应 dll 文件中可导出函数和变量的符号名,编译器通过查看引入库的内容就能够生成可执行文件,但不会将 dll 中的函数实现复制到可执行文件中。程序开始运行后,在执行到动态库中的函数部分代码时,可执行文件会去找 dll 文件,加载其中函数实现相关的二进制代码。在 Windows 平台上静态库文件和引入库文件的扩展名都是 lib,要注意区别。

7) ssleay32 文件中包含与ssl协议相关的函数的实现,libeay32 中包含与密码运算相关的函数的实现。

        最后可以检查编译出来的dll文件是否是64位的,方法如下:

        在 http://www.dependencywalker.com/ 可以下载 depends 工具软件,下载 Dependency Walker for Win64 (x64),运行以后分别打开 ssleay32.dll 和 libeay32.dll,在左上方的子窗口中,可以看到 SSLEAY32.dll 或 LIBEAY32.DLL 的文件名左边有小数字64,说明是 64 位的 dll。(或者在 Module 窗口中找到 SSLEAY32.dll 或 LIBEAY32.DLL,在同一行的 CPU 一栏中,可以看到值是 x64,也说明是 64 位的 dll。) 

        虽然按照上面所说方法编译生成的文件放在 out32、out32dll 目录下,生成的库文件名中也带有"32"字样,如 libeay32.dll,ssleay32.lib,但不可望文生义,以为这些库文件就是 32 位的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值