基於CMake和MinGW在Windows環境下安裝SEAL庫
(一)下載Microsoft SEAL
爲了方便,在本地磁盤D下新建SEALSourceFile用於保存從官方倉庫下載下來的源文件。
因爲下載速度的原因,這裏選擇碼雲鏡像用於下載。
克隆到本地或者點擊下載ZIP,將文件保存到D:\SEALSourceFile\目錄下。
(二)下載CMake並配置
到CMake下載官網選擇對應的二進制安裝文件,注意Windows環境是32位(x86)還是64位(x64):
本人當時使用的是這一版本:
這裏安裝路徑可自由選擇,這裏選擇安裝路徑D:\Program Files\:
打開此電腦->屬性配置環境變量:
打開CMD驗證配置:
(三)下載MinGW並配置
編譯器版本滿足要求的可以跳過下載更新,也可以利用集成開發環境自帶的編譯器用以設置環境變量。
將其解壓到D:\下
打開此電腦->屬性,設置環境變量。
打開CMD驗證配置情況:
(四)編譯源文件native/src並安裝SEAL庫
在CMake安裝目錄D:\Program Files\CMake\bin中找到cmake-gui.exe並打開。選擇需要編譯的項目的文件夾和編譯結果文件的路徑。之後點擊Configure。
彈出提示,這裏選擇Yes以自動生成build文件夾。
選擇編譯器爲MinGw。
再次點擊Configure,設置生成靜態庫類型和安裝位置(這裏建議安裝到系統默認路徑/usr/local或者C:\Program Files\,後面兩個項目的CMake指令能夠找到SEAL庫),再點擊Generate。
以管理員身份運行PowerShell。
進入自定義的構建工程的目錄:D:\SEALSourceFile\SEAL\native\src\build。
PS C:\WINDOWS\system32> cd D:\SEALSourceFile\SEAL\native\src\build
利用工具mingw64下的工具mingw32-make.exe對工程進行構建和安裝。
PS D:\SEALSourceFile\SEAL\native\src\build> mingw32-make
PS D:\SEALSourceFile\SEAL\native\src\build> mingw32-make install
此時已經能在C:\Program Files(x86)\下找到安裝的SEAL靜態庫和頭文件。
(五)編譯官方樣例native/examples
本項目需要鏈接第三方庫,該庫的目錄位於D:\mingw64\x86_64-w64-mingw32。
首先進入目錄
找到並打開CMakeLists.txt,添加命令鏈接第三方庫(第10、11行和第32、33行)。
LINK_LIBRARIES(D:/mingw64/x86_64-w64-mingw32/lib/libbcrypt.a)
LINK_LIBRARIES(D:/mingw64/x86_64-w64-mingw32/lib/libz.a)
target_link_libraries(sealexamples bcrypt)
target_link_libraries(sealexamples z)
接着打開cmake-gui,編譯native/src一樣,新建build文件夾,選擇MinGW編譯。
二次點擊Configure之後點擊Generate。
以管理員模式運行PowerShell。
進入例子項目的的exampels/build文件夾,編譯生成可執行文件。
PS C:\WINDOWS\system32> cd D:\SEALSourceFile\SEAL\native\examples\build
PS D:\SEALSourceFile\SEAL\native\examples\build> mingw32-make
此時可以在D:\SEALSourceFile\SEAL\native\bin下看到sealexamples.exe。
(六)編譯測試文件native/tests
打開D:\SEALSourceFile\SEAL\native\tests下的CMakeLists.txt。
添加鏈接庫命令(第10、11行和第39、40行)。
LINK_LIBRARIES(D:/mingw64/x86_64-w64-mingw32/lib/libbcrypt.a)
LINK_LIBRARIES(D:/mingw64/x86_64-w64-mingw32/lib/libz.a)
target_link_libraries(sealtest bcrypt)
target_link_libraries(sealtest z)
之後進入D:\SEALSourceFile\SEAL\native\tests\thirdparty\googletest目錄,下載googletest子模塊。
git submodule update --init
由於網絡原因也可以尋找鏡像下載googletest源文件到該文件夾。
接着打開cmake-gui,這裏的操作和前兩個項目一樣,新建build文件夾,選擇MinGW編譯。
二次點擊Configure之後單擊Generate。
最後以管理員模式運行PowerShell,生成可執行文件。
PS C:\WINDOWS\system32> cd D:\SEALSourceFile\SEAL\native\tests\build
PS D:\SEALSourceFile\SEAL\native\tests\build> mingw32-make
此時可以在D:\SEALSourceFile\SEAL\native\bin目錄下找到生成的可執行樣例和可執行測試文件。
(七)在IDE上調用靜態庫
一般的集成開發環境都具有圖形化的項目構建選項,除了使用CMake進行組織的項目。
對項目勾選C++17標準或自行添加編譯指令。
在鏈接設置中添加對SEAL庫和其他第三方支持庫的鏈接。
若項目需要gtest.a庫,可在D:\SEALSourceFile\SEAL\native\tests\build\lib下尋找。