编译openssl库

源码下载

编译工程

  • 打开命令行,进入源码根目录
  • 配置VC编译环境,执行命令 “C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat” x86
  • 配置openssl,执行命令 perl Configure VC-WIN32 –prefix=F:\3rd\openssl

    • –prefix 命令为openssl编译完成后的安装路径
    • VC-WIN32 为32位,VC-WIN64A 为64位
  • 生成makefile,执行命令 ms\do_ms.bat

  • 静态编译,执行命令 nmake -f ms\nt.mak
  • 或者动态编译,执行命令 nmake -f ms\ntdll.mak

    • 要修改 MTMD 编译选项,可以在 .mak 文件中修改
  • 编译完成后,安装openssl,执行命令 nmake -f ms\nt.mak install

    • 命令执行完毕后,openssl的库文件就会复制到之前 –prefix 参数指定的目录中
  • 清理临时文件,执行命令 nmake -f ms\nt.mak clean

问题更新

用 Visual Studio 2015 编译 openssl 静态库时,链接时会报错,找不到 __iob_func 的符号,这个需要修改openssl源码根目录下的 e_os.h 头文件,将其中

1
2
3
4
FILE *__iob_func();
#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])

改为

1
2
3
4
FILE* __cdecl __acrt_iob_func(unsigned);
#define stdin (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))