ABY
本实验使用Ubuntu结合项目说明进行从零开始搭建ABY平台
github.com/encryptogro…
准备
-
安装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中即可
注意这里的 OTExtension 和 ENCRYPTO_utils,其中第二个依赖还要再次使用该方法添加依赖的依赖Relic
具体过程就是通过clone或者下载将OTExtension与ENCRYPTO_utils放入ABY/extern中,将Relic放入ENCRYPTO_utils/extern中
注意:要将拓展改名。比如:OTExtension-main要改成OTExtension,这样才可以识别
注意
出现以下语句是正常现象并不是出错