要求环境vs2015,perl以及openssl源码 https://www.openssl.org/source/old/1.0.2/openssl-1.0.2g.tar.gz
1.所有程序中打开vs2015命令行工具,编译32位用左图的,编译64位用右图的
2.切换到源码目录
3.执行perl配置命令,后面的安装路径根据自己需求改写
32位debug: perl Configure debug-VC-WIN32 no-asm --prefix="F:\learn\qt\openssl_build"
32位release: perl Configure VC-WIN32 no-asm --prefix="F:\learn\qt\openssl_build"
64位debug: perl Configure debug-VC-WIN64A no-asm --prefix="F:\learn\qt\openssl_build"
64位release: perl Configure VC-WIN64A no-asm --prefix="F:\learn\qt\openssl_build"
3.编译汇编程序
32位: ms\do_nasm
64位:ms\do_win64a
4.编译动态库
nmake -f ms\ntdll.mak(编译静态库的命令是nmake -f ms\nt.mak)
5.测试
nmake -f ms\ntdll.mak test
6.安装
nmake -f ms\ntdll.mak install (编译静态库的命令是nmake -f ms\nt.mak install)
如果编译过程发生错误,可以使用如下命令做清理并重新编译
nmake -f ms\ntdll.mak clean
7.由于我编译的库是给qt测试用的,所以编写验证程序如下
pro文件
QT += core gui
DESTDIR=../bin
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = openssl_test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
LIBS+=D:\sdk\32\openssl-1.0.2g\lib\libeay32.lib
LIBS+=D:\sdk\32\openssl-1.0.2g\lib\ssleay32.lib
INCLUDEPATH+=D:\sdk\32\openssl-1.0.2g\include
main文件编写
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <openssl/ssl.h>
std::string sha256(const std::string str)
{
char buf[2];
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str.c_str(), str.size());
SHA256_Final(hash, &sha256);
std::string newString = "";
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
sprintf(buf,"%02x",hash[i]);
newString = newString + buf;
}
return newString;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
std::string str = "Hello World";
qDebug() << QString::fromStdString(sha256(str));
return a.exec();
}
运行的后记得把库文件复制到运行目录下
最后运行结果如下:
结果完全正确,接下来就可以在其他项目使用编译好的openssl库了