openssl的编译让我纠结了快两个夜晚了,终于在今天编译出来了.......
记录下编译此库的种种。
正常过程可以参考此文,图文攻略
http://blog.chinaunix.net/space.php?uid=20479991&do=blog&id=216269
简单点说就是
1) 安装Actionperl编译环境
2) 打开cmd命令行,进入openssl文件路径
3) 敲入perl Configure VC-WIN32 命令,运行
4) 敲入ms\do_ms 命令(注意是‘\’),运行
5) 打开你要用到的编译器(VC6,VC9等)找到bin目录下的vcvars32.bat,拖入cmd中,运行,自动配置编译环境。
6) 敲入nmake -f ms/ntdll.mak,运行
基本上没出现stop就算成功了,out32dll中的libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib就是编译完的库
出现的错误
1)NMAKE : fatal error U1077: 'ml' : return code '0x1'
解决方法就是下载一个新的MASM,版本8以上,具体方法可以参见
http://finebree.blog.163.com/blog/static/878793552008102474254280/
将c:/masm32/bin 下的ml.exe覆盖掉即可
2)NMAKE : fatal error U1077: 'cl' : return code '0x2'
解决方法是禁用IPV6
将原来perl Configure VC-WIN32替换成perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0
3)ml不是内部或外部命令,也不是可运行的程序或批处理文件
解决方法是 右键点击我的电脑->属性->高级系统设置->环境变量->系统变量中在path中将ml.exe的路径添加进去。例如我的ml.exe的路径是C:\masm32\bin,就在path中添加C:\masm32\bin;
4)fatal error LNK1103: debugging information corrupt; recompile module
解决办法是 在敲入 ms\do_ms命令后,进入openssl中的ms路径下,找到ntdll.mak文件,将里面所有的/debug都删除掉,然后保存。再进行第五步
第一步下载:https://www.openssl.org/source/ 找到1.1的,下好解压
第二步下载:https://www.activestate.com/activeperl 下好对应版本然后安装
第三步下载:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 推荐找不带"rc"的下载,这玩意不会自己加环境变量需要手动把它的路径加进PATH
第三步:从开始里找到vs的命令提示,vs2017的叫"适用于 VS 2017 的 x64 本机工具命令提示",vs2008的叫"Visual Studio 2008 x64 Win64 命令提示",如果要编X86的就去启动X86版。
第四步:定位到OpenSSL的源码目录(第一步解压的地方)
第五步:以下多选一
- 输入"perl configure VC-WIN64A" 这样生成的是DLL,文件在第一步解压的目录中
- 输入"perl configure VC-WIN64A --prefix=D:\OpenSSL\x64" 这样生成的是DLL,文件在D:\OpenSSL\x64
- 输入"perl configure VC-WIN64A no-shared --prefix=D:\OpenSSL\x64"这样生成的是静态LIB,文件在D:\OpenSSL\x64
- 若需要x86的就把上面VC-WIN64A换成VC-WIN32,这里的A带表AMD64,还有个选项VC-WIN64I对应IA64
第六步:输入"nmake"
第七步:等->死等
第八步:输入"nmake install",执行完就把include和lib给放到prefix指定的目录中了
- 编译过X64后再编译X86需要先nmake clean or nmake /f ms\ntdll.mak clean
- 静态编译的库在使用时需要添加额外链接库:WS2_32.LIB;GDI32.LIB;ADVAPI32.LIB;CRYPT32.LIB;USER32.LIB
- 动态库会依赖VC运行时,比较蛋疼.
如还有其他问题,请参考
http://www.metsky.com/archives/536.html