簡介
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庫的匹配和編譯也是自動完成的。
- 在HElib文件夾下新建build并進(jìn)入
mkdir build
cd build
- cmake
cmake .. -DPACKAGE_BUILD=ON(意思是用第一種方法,都在一個文件夾下) -DCMAKE_INSTALL_PREFIX=安裝位置(就是之前提到的統(tǒng)一的文件夾)
- 編譯
make -j16(線程16個,快一點)
- 測試
ctest
- 安裝
make install
第二種:Library build
此種方法適用于NTL和GMP提前預(yù)裝,HElib在安裝的過程中會鏈接到上兩種庫,此種方法存在的問題:移動時只能動HElib,NTL和GMP由于是裝在了global,無法自由移動。在這里注意的一點,GMP和NTL庫之間還有個match的問題,出錯時會提示,告訴你不match,應(yīng)該是什么版本之間match。
- 同上
- 鏈接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)
- 同上
- 測試
ctest
- 同上
注意:
- 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不行。