安装HElib并运行示例程序

Posted 白水baishui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装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++的版本进行控制:

  1. 更新yum:yum update
  2. 安装centos-release-scl:yum install centos-release-scl
  3. 安装devtoolset:yum install devtoolset-10-gcc*(若要安装其他版本的gcc/g++,可以把10换成其他版本号);
  4. 将g++10加入scl进行控制:scl enable devtoolset-10 bash(要使用scl来控制其他版本的gcc/g++,只需要把10换成对应版本号即可);
  5. 激活g++10环境:source /opt/rh/devtoolset-10/enable(要激活其他版本的gcc/g++,只需要把10换成对应版本号即可);
  6. 查看g++版本:gcc -v

2.4. cmake 安装/升级

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

cmake -version

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

yum install cmake

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

  1. 在官网:https://cmake.org/files/ 选择版本大于3.16的cmake并复制链接,例如我们选择:cmake-3.22.2.tar.gz
  2. 下载cmake:wget https://cmake.org/files/v3.22/cmake-3.22.2.tar.gz
  3. 解压缩cmake:tar zxvf cmake-3.22.2.tar.gz,然后打开目录:cd cmake-3.22.2
  4. 删除低版本的cmake:yum remove cmake -y
  5. 编译cmake:./configure --prefix=/usr/local/cmake
  6. 安装cmake:make && make install
  7. 创建软连接:ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
  8. 修改环境变量:vim /etc/profile,在文件末尾加入两行(注意检查是否之前已存在):export CMAKE_HOME=/usr/local/cmakeexport PATH=$PATH:$CMAKE_HOME/bin
  9. 刷新配置文件: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之后,出现如下界面:


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


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

以上是关于安装HElib并运行示例程序的主要内容,如果未能解决你的问题,请参考以下文章

非法指令(核心转储) HElib

编译程序时出现错误消息

51单片机串口中断函数响应并返回后主函数运行到末尾后卡着不动,主函数无法循环了

subprocess模块

python-subprocess

在 Web 应用中创建 Node.js 应用程序