最近在做同态加密seal库的使用,最新版本是3.6.6,在linux(centos7)编译通过,想做一套windows版(win10)的,记录一下实现的过程。
一、安装cmake
下载安装版的msi文件 3.20以上版本即可
https://cmake.org/download/ 安装时选择添加cmake至系统路径
二、安装vs2019
在Installer中勾选C++以及CMake依赖项
三、下载seal源码:
https://github.com/microsoft/SEAL.git
笔者下载时,最高版本是3.6.6,所以下载了3.6.6
下载解压后,将主目录名称改为“SEAL”,(不知这步是否为必须)
四、编译
1、管理员权限打开cmd,并切换到主目录:
cd SEAL
2、编译seal库并安装
cmake -S . -B build
cmake --build build (cmake --build build --config Release)
(因为默认install找的是release路径下的lib)
cmake --install build
此时,build目录下就会出现工程文件,用vs2019打开即可阅读源码和编译:
lib下就会生成lib文件:
3、编译例子程序:
cd native\examples
cmake -S . -B build
cmake --build build (cmake --build build --config Release)
(默认Debug模式会报错。)
seal库和例子程序的编译设置一定要匹配,比如release/debug、x86/x64
此时,在build文件夹下,就会出现例子程序的工程,可以用vs2019打开进行修改编译等:
至此,windows下获取seal库工程文件完成。
五、创建自己的工程文件调用seal库实现同态加密
1、使用vs2019新建一个空白的应用程序,并选择release/x64模式
2、在项目--属性中添加seal库:
添加库目录:build/lib/release
3、添加头文件目录:native/src
至此,工程设置完毕,可进行程序编写调用seal库了
六、遇到编译错误的解决方式:
1、sprintf等函数报错不安全
解决方法:右键工程名–>属性–>C/C++->预处理器–>预处理器定义,编辑右边输入框加入:
_CRT_SECURE_NO_WARNINGS
2、报 for_each_n 不是std的成员
问题原因:c++版本不是17,参见文章:
关于visual Studio中C++版本的问题 - holdbalance - 博客园 (cnblogs.com)
解决方法:右击项目->属性->C/C++->语言->C++ 语言标准 。 当设置为默认值(应该即为 IOS2014 C++ 14 标准)时,_MSVC_LANG值为 201402L,当其值设置为:IOS2017 C++ 17 标准时,_MSVC_LANG值为 201703L。修改配置后,程序恢复正常。
3、报没有正确结尾:改成不使用预编译头
4、报没有“gsl/span”
把SEAL\thirdparty\msgsl-src\include下的gsl目录拷贝到src下
5、报 config.h缺失,拷过来一个
大致会遇到这些错误吧。