Home 云端Docker搭建ABY库以及本地CLion远程开发
Post
Cancel

云端Docker搭建ABY库以及本地CLion远程开发

前言

  • 仅做记录,仅供参考,不同人有不同的使用方式
  • 命令手敲,可能有错,自己辨识
  • 勿问,我懂的也不多,瞎搞的

ABY库的下载、安装及测试

  • Github 官网

  • 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
    

    注:

    1. make中,-j50指定线程数,可以不加或者自行调整
    2. 安装后的路径在/usr/local/include/usr/local/lib
  • 测试用例:百万富翁-测试

  • 我自己的测试过程:

    • 测试代码: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
      ./
      
  • 编译后遇到的问题

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)
  • 搭了两天后的记录,可能不太全面,只提供了大致的思路,细节方面需要自己去琢磨与尝试
  • 遇到其他问题也欢迎与我交流,看到就会回,不过每个人的需求不同,根据自己的需求搭环境
This post is licensed under CC BY 4.0 by the author.