由于需要调用openssl的库.所以需要安装一下.
下载ActivePerl 5.10.1.1007(最新的版本或较低的版本也可以):
下载地址:http://www.activestate.com/activeperl/downloads/
下载 openssl-0.9.8m(当然也可以最新的版本)并解压。
下载地址: http://www.openssl.org/source/
1) 安装 ActivePerl
2) 下载 openssl,一定要解压缩到C盘根目录,放到其他盘编译会提示找不到头文件.
unable to read opensslv.h:No such file or directory
搜索一下vs2012的目录,找到nmake.exe,将路径设置到系统的path环境变量里面
D:\program files (x86)\Microsoft Visual Studio 11.0\VC\bin;加到path里面,因为里面包含了nmake命令
3) 进入到C:\openssl\目录
3.0) 打开一个cmd窗口,执行以下5步(注意不要切换窗口,特别是3.4)
3.1 ) 执行 perl Configure VC-WIN32 如果不在C盘,会提示找不到头文件(没错,是VC-WIN32)
3.2) 执行 ms\do_masm
3.3) 执行 ms\do_nasm
3.4) 找到vs2012自带的vsvar32.bat,不同版本的vs可能路径不同,自己搜以下vsvar32.bat在哪个目录下
执行"D:\program files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat"
3.5) 最后一步,执行 nmake -f ms\ntdll.mak
备注:如果忽略3.4步,则会提示 用nmake 编译出现错误 “cl.EXE: 返回代码 0xc0000135”
4) 终于编译成功了.
可以查看目录 openssl-0.9.8zh\out32dll 来确认是否生成了 dll
建立工程
打开vsxxxx,
在additionalinclude directories加上
找到openssl的include路径
"C:\openssl-0.9.8g\include"
这个目录.
在additionallibrary directories加上
找到 openssl的out32.dll的路径,每个环境的具体路径具体设置
"C:\openssl-0.9.8g\out32dll"
这个目录
C++代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include<openssl/bn.h> #include<openssl/ec.h> #include<openssl/rand.h> #include<openssl/err.h> #include<openssl/ecdsa.h> #include<openssl/ecdh.h> #include"sm2.h" #pragmacomment(lib,"libeay32.lib")
以上是参考其他人的文章汇总的
其他地方需要注意的:
1) 版本使用 openssl-0.9.8g
如果使用最新的版本,编译完之后,可能include目录不存在openssl的头文件,那就郁闷了
2) 需要安装 NASM-2.07-installer.rar ( 这里版本我不太确定,使用这个就正常了 )
安装完之后,需要把安装目录设置到环境变量里面
复制文件 nasm.exe 为 nasmw.exe 在nasm的安装目录操作,
因为后面nmake需要使用nasmw命令
3) 编译 nmake -f ms\ntdll.mak
需要重新打开cmd窗口,才能找到nasmw的命令
执行: "D:\program files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat"
编译: nmake -f ms\ntdll.mak
最后才能编译成功,并且能找到对应的openssl的头文件
4) 项目源码需要包含include目录,依赖库需要包含out32dll目录
5) 编译代码需要添加
#pragmacomment(lib,"libeay32.lib")
6) 关于C的变量命名,使用VC编译,所有的变量声明必须要放到函数的前面.
不能功能与变量随便定义.