安全多方ABY框架搭建与常见问题汇总

ABY框架搭建与问题汇总

本实验使用Ubuntu结合ABY项目说明进行从零开始搭建ABY平台

准备

在这里插入图片描述

  • 安装git
  • 安装g++
  • 安装cmake
  • 安装libgmp-dev
  • 安装libssl-dev
  • 安装libboost-all-dev

使用以下命令分别安装即可

sudo apt-get install <package-name>

如果安装速度过慢可以更改镜像

介绍

g++

ABY项目是一个C++项目因此我们需要安装g++编辑器

首先我们需要添加其依赖

gcc 和 g++

实际上,只要是 GCC 支持编译的程序代码,都可以使用 gcc 命令完成编译。可以这样理解,gcc 是 GCC 编译器的通用编译指令,因为根据程序文件的后缀名,gcc 指令可以自行判断出当前程序所用编程语言的类别,比如:

xxx.c:默认以编译 C 语言程序的方式编译此文件;

xxx.cpp:默认以编译 C++ 程序的方式编译此文件。

xxx.m:默认以编译 Objective-C 程序的方式编译此文件;

xxx.go:默认以编译 Go 语言程序的方式编译此文件;

当然,gcc 指令也为用户提供了“手动指定代表编译方式”的接口,即使用 -x 选项。例如,gcc -xc xxx 表示以编译 C 语言代码的方式编译 xxx 文件;而 gcc -xc++ xxx 则表示以编译 C++ 代码的方式编译 xxx 文件。有关 -x 选项的用法,后续会给出具体样例

但如果使用 g++ 指令,则无论目标文件的后缀名是什么,该指令都一律按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件来说,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译。

cmake

CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。

CMake能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake

假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。

即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

gcc make cmake

  • 当你的程序只有一个源文件时,直接就可以用gcc命令编译它

  • 但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,所以出现了make工具
    make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接,makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令

  • makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile

  • CMakeLists.txt文件是你自己手写的。当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按下三角形即可

cmake是make maker,生成各种可以直接控制编译过程的控制器的配置文件,比如makefile、各种IDE的配置文件
make是一个简单的通过文件时间戳控制自动过程、处理依赖关系的软件,这个自动过程可以是编译一个项目

安装cmake与g++

sudo apt install cmake
sudo apt-get install g++

查询版本

cmake --version
g++ --version

在这里插入图片描述

项目框架构建

我们需要克隆ABY代码仓库

git clone https://github.com/encryptogroup/ABY.git

创建build文件夹进行构建

cd ABY/
mkdir build && cd build
cmake ..

这一步当中会遇到一些问题,可以参照下一章节的总结,这里我们假设完成了Debug并继续

make

在这里插入图片描述

成功运行!

cmake .. -DABY_BUILD_EXE=On//执行之后产生bin文件

构建问题汇总

一般会出现一些错误,我们可以根据cmake ..之后的报错进行Debug,或者查看日志进行改错

这里将一些常见问题汇总如下:

1.版本问题

在这里插入图片描述

对报错的版本进行更改,对g++而言,目前的sudo apt-get install g++版本已经满足要求不会出现报错,但如果出现类似问题,具体参见该文章

2.包缺失

在这里插入图片描述

这里没有安装git,导致检测过程中报错。通过查看文件,我们可以发现,类似的其他包未安装也会提示报错

在这里插入图片描述

3.拓展丢失

在这里插入图片描述

出错原因:缺少两个依赖,这里我们选择主动下载依赖加入到extern中即可

注意这里的 OTExtensionENCRYPTO_utils,其中第二个依赖还要再次使用该方法添加依赖的依赖Relic

具体过程就是通过clone或者下载将OTExtension与ENCRYPTO_utils放入ABY/extern中,将Relic放入ENCRYPTO_utils/extern中

注意:要将拓展改名。比如:OTExtension-main要改成OTExtension,这样才可以识别

注意

出现以下语句是正常现象并不是出错
在这里插入图片描述

具体可以参考文章:What does “Performing Test CMAKE_HAVE_LIBC_PTHREAD” failed actually mean?

运行案例

进入到ABY/build/目录下进行操作 make

make

在ABY/build/bin/目录下打开两个终端,分别输入如下代码,就可以运行实例得到结果

./millionaire_prob_test -r 0
./millionaire_prob_test -r 1

在这里插入图片描述
完成测试!

参考文章:
怎么搭建一个ABY框架并运行实例
ABY框架的搭建及踩到的坑

猜你喜欢

转载自blog.csdn.net/m0_52739647/article/details/124654712