zoukankan      html  css  js  c++  java
  • 64位Win7下用VS2010编译OpenSSL

    http://blog.csdn.net/henter/article/details/8364532


    首先要说明,如果不想自己编译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:Perl64sitein;E:Perl64in; ...

    启动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.0vcinamd64 ,执行命令 vcvar64.bat。

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


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

    注意:

    1)  nmake -f ms tdll.mak命令生成动态链接库,输出内容在opensslout32dll目录下。
         nmake -f ms t.mak命令生成静态链接库,输出内容在opensslout32目录下。 

    2) 如果要编译出32位的库,用不到汇编时对上面的执行命令做以下修改:把perl Configure VC-WIN64A 改为 perl Configure VC-WIN32 no-asm,把msdo_win64a 改为 msdo_ms,其他命令不变。用到汇编时对上面的执行命令做以下修改:把perl Configure VC-WIN64A 改为 perl Configure VC-WIN32,执行完 perl Configure VC-WIN32命令后,接下来执行 msdo_nasm,再把执行msdo_win64a 改为执行 msdo_ms,剩下的两条nmake命令不变。

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

    4) 可以使用--prefix=...来指定openssl编译好以后的安装路径,随便举一个例子:

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

     5)  可能用到以下命令

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

         测试动态库:    nmake -f ms tdll.mak test
         编译静态库:    nmake -f ms t.mak
         测试静态库:    nmake -f ms t.mak test

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

    5) 在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, 但是同名文件不能混用。

    6) 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位的。


    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    参考资料来自 懒兔子 的公众号
    Etcd
    zookeeper 杂记
    十二五
    防火墙
    APScheduler
    docker管理工具protainer
    java学习笔记
    linux学习笔记1
    [POI2007]ZAP-Queries
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834721.html
Copyright © 2011-2022 走看看