Windows下编译OpenSSL库

一:编译工具

  1、安装汇编工具nasm。从http://www.nasm.us/pub/nasm/releasebuilds/2.06/win32/nasm-2.06-installer.exe 下载并安装。
  2、安装脚本语言ActivePerl。从http://downloads.activestate.com/ActivePerl/Windows/5.10/ActivePerl-5.10.0.1005-MSWin32-x86-290470.msi 下载,然后安装(安装过程中选择默认选项即可)。
  3、使用VS2003(05,008,10都可)下的Visual Studio 2003Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
 
二:编译

OpenSSL库网上只有源代码,我们首先必须编译。从http://www.openssl.org/source/openssl-1.0.1e..tar.gz 下 载源代码包,然后解压到目录C:/openssl-1.0.1e下(最终存在目录C:/openssl-1.0.1e/apps即表示正确)。进入 Visual Studio 2008的命令提示符(开始-->所有程序-->Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 Command Prompt),依次输入如下命令:

1. 创建库目录

mkdir c:\openssl_lib 
 
2. 进入openssl源码目录
cd C:\openssl-1.0.1e
 
以下为参照该目录下的文件INSTALL.W32的执行过程:
3.运行configure:
        perl Configure VC-WIN32 --prefix=c:/openssl_lib
---输出如下的信息:
……
RC4_CHUNK is undefined
 
Configured for VC-WIN32.
4. 创建Makefile文件:
    ms\do_ms.bat
   
5. 编译动态库:
    nmake -f ms\ntdll.mak
6.  编译静态库:
    nmake -f ms\nt.mak
   
 7.  测试动态库:
    nmake -f ms\ntdll.mak test
8. 测试静态库:
    nmake -f ms\nt.mak test
 
9. 安装动态库:
    nmake -f ms\ntdll.mak install
10. 安装静态库:
    nmake -f ms\nt.mak install
 
11. 清除上次动态库的编译,以便重新编译:
    nmake -f ms\ntdll.mak clean
12.  清除上次静态库的编译,以便重新编译:
    nmake -f ms\nt.mak clean
 
---现在应该在c:/openssl_lib下安装了openssl库文件和头文件了。
---如果编译出错,那么也可以查看文件C:/openssl-1.0.1e/INSTALL.W32,里面列举了一些错误处理方法。
 

三、问题

    我在链接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即可。

 
posted @ 2013-10-12 14:43  jdfemqi  阅读(1501)  评论(0编辑  收藏  举报