由于vc2013编译的openssl库用在vc2017的工程中会报LNK2019找不到___iob_func的错误,不得不重新在vc2017下编译openssl库,会到问题如下:
- 要先安装ActivePerl和nasm。
- openssl不能下载最新的,因为比如gsoap使用的很多结构体都是老openssl里的。因此,我这里还是编译openssl-1.0.1p。
-
解压出openssl-1.0.1p目录后,为了防止编译时出现以下错误,
constant_time_test.obj : error LNK2019 ___iob_func
先要修改里面的e_os.h如下:1 2 3 4 5 6 7 8 9 10 11 12
# if defined(_MSC_VER) && !defined(_DLL) && defined(stdin) # if _MSC_VER>=1300 #if 0 // add here # undef stdin # undef stdout # undef stderr FILE *__iob_func(); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) #endif // add here # elif defined(I_CAN_LIVE_WITH_LNK4049)
也就是禁止它修改stdin之类的指向__iob_func。
注意,如果已执行了nmake,再改e_os.h,再nmake是不能自动解决依赖关系重编的。要么删掉openssl-1.0.1p目录,重新解压,要么执行
nmake -f ms\nt.mak clean -
编译脚本为:
1 2 3 4
perl Configure VC-WIN32 --prefix=d:\OpenSSL ms\do_nasm.bat nmake -f ms\nt.mak nmake -f ms\nt.mak install
最终生成的库在d:\OpenSSL里。