前言
- 仅做记录,仅供参考,不同人有不同的使用方式
- 命令手敲,可能有错,自己辨识
- 勿问,我懂的也不多,瞎搞的
ABY库的下载、安装及测试
APT安装
1
apt update && apt install g++ make cmake libgmp-dev libssl-dev libboost-all-dev doxygen -y
- 推荐递归下载,下载后备份这个库,以防后面搞烂
1 2
git clone --recursive https://github.com/encryptogroup/ABY.git cp -r ABY ABY_bak
- 编译及安装(推荐安装到非标准位置)
1 2 3 4
cd ABY mkdir build && cd build cmake .. && make -j50 && make install
注:
- make中,
-j50
指定线程数,可以不加或者自行调整 - 安装后的路径在
/usr/local/include
和/usr/local/lib
- make中,
测试用例:百万富翁-测试
我自己的测试过程:
测试代码:ABY_test.cpp
1 2 3 4 5
#include <abycore/aby/abyparty.h> int main() { return 0; }
项目结构
ABY和自己的子项目Prj1在同级目录下,需要写两个CMakeList,一个在顶级目录下,一个在子项目Prj1下
顶级目录下的CMakeLists.txt
1 2 3 4 5 6 7
cmake_minimum_required(VERSION 3.12) set(CMAKE_CXX_STANDARD 17) project(Prj LANGUAGES CXX) # 主项目名 add_subdirectory(Prj1)
子项目(Prj1)下的CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
cmake_minimum_required(VERSION 3.12) set(CMAKE_CXX_STANDARD 17) project(Prj1 LANGUAGES CXX) # 子项目名 # set up ABY list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../ABY/cmake") # 添加路径 find_package(ABY) find_package(GMP REQUIRED) find_package(Threads REQUIRED) find_package(Boost 1.66.0 REQUIRED COMPONENTS thread system) find_package(OpenSSL REQUIRED) add_subdirectory(../ABY ABY.out) # 引用非子目录 refer: https://blog.csdn.net/weixin_30702887/article/details/95206925 add_executable(A ABY_test.cpp) target_link_libraries(A ABY::aby OpenSSL::Crypto ENCRYPTO_utils::encrypto_utils)
编译测试
1 2 3
mkdir build && cd build cmake .. && make ./
编译后遇到的问题
cmake_constants.h is not found:这个是源码里的问题,解决:cmake_constants.h is not found #197,参考:配置OPPRF-PSI密码学协议
cmake error relic:安装ENCRYPTO_utils在全局环境下就会产生的问题,解决:
rm -r /usr/local//lib/cmake/ENCRYPTO_utils/ /usr/local/lib/cmake/OTExtension/
,参考:cmake error relic #145
CLion配置
- Clion挂载docker,详细请移步:Clion Connect Remote Server (Docker)
- CLion挂载到ABY目录,改下Mapping
- 在CLion下测试,可以把百万富翁那个样例拉出来测试,同样注意路径问题,CMakeList自行修改,给个参考:
- 跑通就算成功
- 提一嘴,百万富翁这个例子需要输入参数,并且需要两个终端运行,CLion可以在配置出修改
后续
- 到这里虽然程序跑通了,但是CLion没办法获取到ABY库的信息,代码处都是报红。之前试过,如果安装ABY库,也就是前面提到的安装到
/usr/local/ABY
,安装后CLion可以检索到ABY库,include不报错,代码不报红了,但是!跑不通了,程序运行的时候提示找不到那些package。 - 权衡利弊,我最终选用的解决方案是,ABY库安装后从云端拉到本地,然后云端的ABY库删掉,这样程序就能顺利运行了。然后把下载到本地的ABY库里的include里的文件拷贝到项目下,然后把
include <>
的部分换成include ""
,这样代码就不会报错,程序也能正常运行。 - 再提一嘴,把ABY的include里的文件拷贝到项目内后,可以设置这几个目录不同步到云端。还是在Deployment处,前面在Mapping设置过挂载的路径,在这里可以设置Excluded Paths
杂项
项目改名
- CMakeList里
project()
可以修改项目名,原本是ABY,如果要改名的话,注意,在cmake路径下有一个文件:ABYConfig.cmake.in
,如果只修改项目名的话,会报错找不到cmake.in文件,需要把ABYConfig.cmake.in
文件改名为你的项目名Config.cmake.in
最后
- 最终效果就是,Clion上代码显示正常,无报错,调试和运行也能在云端正常运行
- 搭这玩意花了我两天,建议新手学下CMakeList,还得熟悉Clion与Docker的连接部署等操作,参考我的上一篇博客:Clion Connect Remote Server (Docker)
- 搭了两天后的记录,可能不太全面,只提供了大致的思路,细节方面需要自己去琢磨与尝试
- 遇到其他问题也欢迎与我交流,看到就会回,不过每个人的需求不同,根据自己的需求搭环境