安装HElib并运行示例程序

简介: 安装HElib并运行示例程序

1. HElib简介


HElib是一个基于C++语言的同态加密开源软件库,底层依赖于NTL数论运算库和GMP多精度运算库实现,下载地址在:github HElib。

2. HElib安装的前期准备


HElib可以在Ubuntu、CentOS、Fedora和macOS上安装,本篇博客以 CentOS 为例。安装HElib的方法有两种,其中博客:Hang Shao HElib 详细讲解了HElib的第二种安装方法,本篇博客就不重复啰嗦,我们来讲讲 第一种 安装方法,也是较为简单的一种。

第一种安装方法不需要自己配置安装:NTL(https://libntl.org/) 和 GMP(https://gmplib.org/) 两个库,相对轻松一些。

HElib在CentOS上安装所需要的环境:

git >= 2.27
GNU make >= 4.2
g++ >= 9.3.0 (建议使用 g++ 10.3.0)
cmake >= 3.16
m4 >= 1.4.16
patchelf >= 0.9

2.1. git 安装/升级

首先使用命令查看当前的git版本:

git --version

若版本小于2.27,则升级:

yum install git

2.2. GNU make 安装/升级

首先使用命令查看当前的make 版本:

make -v

若版本小于4.2,则升级:

yum install make

2.3. g++ 安装/升级

g++的安装和升级与其他库不同,由于系统中不同的软件可能需要不同的g++版本,所以不能直接覆盖安装g++。

这里,我们使用devtoolset来对g++的版本进行控制:

更新yum:yum update;

安装centos-release-scl:yum install centos-release-scl;

安装devtoolset:yum install devtoolset-10-gcc*(若要安装其他版本的gcc/g++,可以把10换成其他版本号);

将g++10加入scl进行控制:scl enable devtoolset-10 bash(要使用scl来控制其他版本的gcc/g++,只需要把10换成对应版本号即可);

激活g++10环境:source /opt/rh/devtoolset-10/enable(要激活其他版本的gcc/g++,只需要把10换成对应版本号即可);

查看g++版本:gcc -v

2.4. cmake 安装/升级

首先使用命令查看当前的cmake 版本:

cmake -version

若版本小于3.16,则升级(直接升级):

yum install cmake

如果直接升级的方法不成功,那就只好编译安装了:

在官网:https://cmake.org/files/ 选择版本大于3.16的cmake并复制链接,例如我们选择:cmake-3.22.2.tar.gz;

下载cmake:wget https://cmake.org/files/v3.22/cmake-3.22.2.tar.gz

解压缩cmake:tar zxvf cmake-3.22.2.tar.gz,然后打开目录:cd cmake-3.22.2;

删除低版本的cmake:yum remove cmake -y;

编译cmake:./configure --prefix=/usr/local/cmake;

安装cmake:make && make install;

创建软连接:ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake;

修改环境变量:vim /etc/profile,在文件末尾加入两行(注意检查是否之前已存在):export CMAKE_HOME=/usr/local/cmake、export PATH=$PATH:$CMAKE_HOME/bin;

刷新配置文件:source /etc/profile。


2.5. m4和patchelf 安装/升级


直接安装即可:

yum install m4

yum install patchelf


3. HElib的下载和安装


(1) 上面已经说过,HElib的主页在:https://github.com/homenc/HElib,那么我们直接git下来就好了:

git clone https://github.com/homenc/HElib


(2) 然后在HElib目录内创建一个build目录,用于构建项目:

cd HElib

mkdir build

cd build


(3) 在build目录内构建项目:

cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON ..


这里有必要说一下,HElib的作者在cmake时提供了-DCMAKE_INSTALL_PREFIX选择用于改变项目构建的路径,但是如果你已经有root权限了,就不需要这个步骤了。如果你没有root权限,那就要改成:

cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install ..


其中,/home/alice/helib_install是一个自定义的路径,你想把HElib安装在哪里,就把这个路径改成那里的路径。

(4) 编译

cmake结束后,就进行编译:

make -j16


这里的16是指启用16个线程进行编译,可以改多,不建议改得太少,否则这个步骤会进行地很慢。

(5) 进行测试,这个步骤可以省略:

ctest


说一下,这个命令只有在cmake步骤时设置了-DENABLE_TEST=ON时有用,否则是执行不了的。

(6) 安装HElib

make install


如果在cmake时没有设置-DCMAKE_INSTALL_PREFIX,那么HElib默认安装在/usr/local/helib_pack下。

我们打开这个目录:

cd /usr/local/helib_pack


目录中有4个子目录:include、lib、lib64和share

drwxr-xr-x. 4 root root  43 Jan 28 05:34 include
lrwxrwxrwx. 1 root root   5 Jan 28 05:34 lib -> lib64
drwxr-xr-x. 3 root root 184 Jan 28 05:42 lib64
drwxr-xr-x. 5 root root  42 Jan 28 05:34 share


分别把它们复制到/usr/local的对应位置:

cp -r ./include/* /usr/local/include/
cp -r ./lib/lib* /usr/local/lib/
cp -r ./lib/pkgconfig/* /usr/local/lib/pkgconfig/
cp -r ./lib64/lib* /usr/local/lib64/
cp -r ./lib64/pkgconfig/* /usr/local/lib64/pkgconfig/
cp -r ./share/cmake/ /usr/local/share/
cp -r ./share/doc/* /usr/local/share/doc/
cp -r ./share/info/* /usr/local/share/info/


(7) 更新lib文件

ldconfig


如果共享库文件安装到了/lib或/usr/lib目录下,那么需执行一下ldconfig命令。

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,

搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

到此为止,HElib就安装好啦。

4. 运行HElib示例程序


让我们回到之前git clone下来的HElib目录,里面有个examples子目录,进入它:

cd ./examples


和上面的步骤一样,我们需要创建一个build目录,用于构建项目:

mkdir build

cd build


由于我们已经把HElib安装到/usr/local/下了,所以可以直接进行cmake:

cmake -Dhelib_DIR=/usr/local/share/cmake/helib/ ..


然后make:

make -j16


完成后,在build目录内会生成一个bin目录,打开它:

cd ./bin


运行其中一个示例程序试试看:

cp ../../BGV_country_db_lookup/countries_dataset.csv ./
./BGV_country_db_lookup


注意,cp ../../BGV_country_db_lookup/countries_dataset.csv ./是BGV_country_db_lookup特有的命令,因为这是一个查找程序,而供其查找的数据表就是countries_dataset.csv,所以需要复制过来。

执行了./BGV_country_db_lookup之后,出现如下界面:

0a2653c851af460fa595bd959398a8f1.png

输入一个国家名字,例如China,然后按回车:

2d65d23f6d4748949b924e4057485923.png

啥也没查着,没有China的数据,不过这个示例程序依然运行成功了。完成。

相关文章
|
6月前
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
981 1
|
6月前
LabVIEW为可执行文件构建安装程序时找不到运行引擎
LabVIEW为可执行文件构建安装程序时找不到运行引擎
66 0
|
6月前
|
IDE 编译器 Shell
运行C程序的步骤与方法
C语言是一种通用、过程式的计算机编程语言,广泛应用于系统软件与应用软件的开发中。本文将详细介绍如何编写、编译和运行一个简单的C程序,并附上相应的代码示例。
141 0
|
C++
03 C++ - CLion创建程序
03 C++ - CLion创建程序
116 0
|
Linux Python
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本
|
Java 数据安全/隐私保护 Windows
idea2022版本下载安装配置卸载(包含运行第一个java程序教程)详细步骤
JDK和IDEA的关系举个例子 JDK:武器(java开发集成环境) IDEA:战士 (java开发软件)
479 0
idea2022版本下载安装配置卸载(包含运行第一个java程序教程)详细步骤
|
Windows
Qt程序打包生成exe详细步骤
Qt程序打包生成exe详细步骤
Qt程序打包生成exe详细步骤
|
SQL Java 关系型数据库