Windows下编译OpenSSL库

  • Post author:
  • Post category:其他


一:编译工具

1、安装汇编工具nasm。从

http://www.nasm.us/pub/nasm/releasebuilds/2.06/win32/nasm-2.06-installer.exe

下载并安装。

2、安装脚本语言ActivePerl。从


下载,然后安装(安装过程中选择默认选项即可)。

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即可。

转载于:https://www.cnblogs.com/jdfemqi/p/3365232.html