在 Windows下用 Visual studio 编译 OpenSSL (VC6 VS2003-VS2010)
我下载的 openssl 的源代码包是 openssl-1.0.0c.tar.gz, 版本 1.0.0c.
1. 安装 ActivePerl, 因为初始化的时候, 需要用到 perl 解释器
2. 使用 VS2005 下的 Visual Studio 2005 Command Prompt 进入控制台模式 (这个模式会自动设置各种环境变量)
3. 解压缩 openssl 源代码包, 进入 openssl 的根目录, 如 c:\openssl-1.0.0c
4. perl configure VC-WIN32
必须在 c:\openssl-1.0.0c 目录下执行该命令, 否则找不到 Configure 文件, 这时就必须指定完整的 Configure 文件路径.
5. ms\do_ms
在 c:\openssl-1.0.0c 目录下执行 ms\do_ms 命令
6. 在正式编译之前,
(1). 找到 c:\openssl-1.0.0c\ms\ntdll.mak 文件, 用记事本打开, 搜索 “/MD” 字符串, 替换成 “/MT”, 这将导致静态链接 C 运行时, 省却你要在目标机器上安装 VC 再发行包等等让人抓狂的事.
(2) 找到 c:\openssl-1.0.0c\e_os.h 文件, 用记事本打开, 找到
# if !defined(OPENSSL_USE_IPV6) # if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB) # define OPENSSL_USE_IPV6 1 # else # define OPENSSL_USE_IPV6 0 # endif # endif
替换成
#if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER > 1200 ) # if !defined(OPENSSL_USE_IPV6) # if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB) # define OPENSSL_USE_IPV6 1 # else # define OPENSSL_USE_IPV6 0 # endif # endif #else # if !defined(OPENSSL_USE_IPV6) # define OPENSSL_USE_IPV6 0 # endif #endif
这一步的目的是, 在 VC6 下编译时, 避免使用 IPv6 特性, 因为 VC6 不支持.
(3). 找到 c:\openssl-1.0.0c\crypto\mem.c 文件, 在文件靠近顶部包含文件语句的下面, 添加如下代码
#ifndef OPENSSL_CPUID_OBJ extern unsigned char cleanse_ctr; #endif
7. 编译动态链接库版本
nmake -f ms\ntdll.mak
8. 编译静态链接库版本
nmake -f ms\nt.mak
完成编译后, 输出的动态链接库版本文件在 out32dll 里面, 包括应用程序的可执行文件, lib 文件和 dll 文件;
静态链接库版本文件在 out32 里面, 包括应用程序的可执行文件和 lib 文件.



近期评论