Windows下编译 32位和64位 OpenSSL 2016-04-12

备份 专栏收录该内容
37 篇文章 0 订阅

http://slproweb.com/products/Win32OpenSSL.html 编译好的openssl
###今天由于项目需要,需要编译一个OPENSSL,之前虽然也编译过,但是今天整理下,做个备份,以便日后需要。

  1. 首先下载源码 https://www.openssl.org/source/ 下载openssl-1.0.1p.tar.gz网页
  2. 下载解压到一个目录,最好是英文路径,我的例子D:\opensslsrc32\openssl-1.0.1p这里写图片描述
  3. http://www.activestate.com/activeperl 下载安装 Activestate Perl
  4. 安装vs2013,现在我用的是最新的vs2013 以前2005也编译过,应该差不多
  5. 配置好环境变量,参考设置 C:\Perl\site\bin;C:\Perl\bin;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE
  6. 下面开始编译
    1. 首先运行cmd 进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin,运行vcvars32,这个一定要先执行,不然后来会报错一些.h找不到这里写图片描述
    2. 进入openssl安装目录,依次执行以下命令
      perl Configure VC-WIN32 --prefix=C:\opensslbuild32
      ms\do_ms
      nmake -f ms\nt.mak
      nmake -f ms\nt.mak install
      nmake -f ms\ntdll.mak
      nmake -f ms\ntdll.mak install

这里写图片描述

这里写图片描述

  1. 如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib

64位版本的编译,和32位差不多
1.设置环境变量,C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64
运行cmd,进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64,运行vcvars64.bat。
2.进入d:盘 openssl目录
这里写图片描述
依次执行以下命令
perl Configure VC-WIN64A --prefix=C:\opensslbuild64
ms\do_win64a
nmake -f ms\ntdll.mak clean
nmake -f ms\ntdll.mak
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak

这里写图片描述

我在链接OpenSSL的静态函数库时遇到类似以下的问题:
Linking… msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)

这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下:

编辑文件 ms\nt.mak,将该文件第19行
“CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5-DOPENSSL_NO_DYNAMIC_ENGINE” 中的"/MD"修改为"/MT"。然后重新编译安装OpenSSL即可。

四、附录:在VC中对C/C++ 运行时库不同版本编译指令说明
《在VC中对C/C++ 运行时库不同版本编译指令说明》(http://blog.yesky.com/271/dgkang/1737771.shtml)一文中详细介绍了连接不同版本库的编译指令如下:
C Runtime Library:
/MD MSVCRT.LIB 多线程DLL的Release版本
/MDd MSVCRTD.LIB 多线程DLL的Debug版本
/MT LIBCMT.LIB 多线程静态链接的Release版本
/MTd LIBCMTD.LIB 多线程静态链接的Debug版本
/clr MSVCMRT.LIB 托管代码和非托管代码混合
/clr:pure MSVCURT.LIB 纯托管代码
C++ Standard Library:
/MD MSVCPRT.LIB 多线程DLL的Release版本
/MDd MSVCPRTD.LIB 多线程DLL的Debug版本
/MT LIBCPMT.LIB 多线程静态链接的Release版本
/MTd LIBCPMTD.LIB 多线程静态链接的Debug版本

ms/ntdll.mak ms/nt.mak
14行可以修改输出路径 对于nmake -f ms\ntdll.mak install nmake -f ms\nt.mak install 命令
INSTALLTOP=\usr\local\ssl
OPENSSLDIR=\usr\local\ssl

  1. 参考文档http://blog.chinaunix.net/uid-20479991-id-216269.html http://blog.csdn.net/dragoo1/article/details/22398473 http://www.jerryrw.com/howtocompile.php http://blog.csdn.net/pony_maggie/article/details/8588888
    http://blog.csdn.net/xhydra/article/details/12517135
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值