Kali2020編譯HElib出現(xiàn)的一些問題

簡介

HElib依賴的庫主要有NTL、GMP。
GMP庫主要是用來做大整數(shù)運算,在HE里,不允許出現(xiàn)小數(shù),因此會將小數(shù)轉(zhuǎn)化為大整數(shù),在這里需要用到GMP庫。
NTL庫用來做帶符號的長整數(shù)、矢量的基本運算和矩陣運算等。

安裝步驟

第一種:package build

這種是將HElib、NTL、GMP均裝在一個文件夾下,優(yōu)點是在系統(tǒng)中方便移動。NTL庫和GMP庫的匹配和編譯也是自動完成的。

  1. 在HElib文件夾下新建build并進(jìn)入
mkdir build 
cd build
  1. cmake
cmake .. -DPACKAGE_BUILD=ON(意思是用第一種方法,都在一個文件夾下) -DCMAKE_INSTALL_PREFIX=安裝位置(就是之前提到的統(tǒng)一的文件夾)
  1. 編譯
make -j16(線程16個,快一點)
  1. 測試
ctest
  1. 安裝
make install 

第二種:Library build

此種方法適用于NTL和GMP提前預(yù)裝,HElib在安裝的過程中會鏈接到上兩種庫,此種方法存在的問題:移動時只能動HElib,NTL和GMP由于是裝在了global,無法自由移動。在這里注意的一點,GMP和NTL庫之間還有個match的問題,出錯時會提示,告訴你不match,應(yīng)該是什么版本之間match。

  1. 同上
  2. 鏈接GMP、NTL庫并cmake
cmake -DGMP_DIR="${GMPDIR}"(GMP當(dāng)前位置) -DNTL_DIR="${NTLDIR}" -DENABLE_TEST=ON(允許測試) -DCMAKE_INSTALL_PREFIX=(安裝位置,默認(rèn)/usr/local/lib或/usr/local/include)
  1. 同上
  2. 測試
ctest
  1. 同上

注意:

  • m4版本大于等于1.4.16
  • patchchelf版本大于等于0.9
  • GMP >= 6.0.0
  • NTL >= 11.4.3

安裝過程中出現(xiàn)的問題:

我嚴(yán)格按照INSTALL.md兩種安裝方法進(jìn)行嘗試,均失敗,調(diào)整后成功

核心問題一:

GMP和NTL版本不匹配,我用的NTL14.4 GMP 6.2.1,編譯HElib時error log提示更改成GMP 6.1.2才行,于是重新卸載GMP,安裝舊版本成功。

問題二:

缺少庫,無法自動下載,git和wget時出現(xiàn)SSL錯誤問題,我通過手動下載并安裝這些依賴解決,對于如何自動解決這個問題,我查了資料并嘗試,均失敗。

問題三:

編譯一個測試文件,目的是為了看HElib是否真正可調(diào)用,編譯失敗問題。
其實編譯HElib自帶的example里的代碼即可,因為HElib的更新,導(dǎo)致我用的類名更換,所以出現(xiàn)了一系列問題。另一個則是指定-std=c++17,any在17中才有,用11不行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容