在 Windows msys2 下編譯 scryer-prolog
- 2022 年 7 月 25 日
- 筆記
by chesium 2022/7/24 深夜
參考://github.com/mthom/scryer-prolog/blob/master/README.md
採用 msys2 環境編譯
On Windows, Scryer Prolog is easier to build inside a msys2 environment as some crates may require native C compilation. However, the resulting binary does not need msys2 to run. When executing Scryer in a shell, it is recommended to use a more advanced shell than mintty (the default msys2 shell). The Windows Terminal works correctly.
- 下載msys2:官網,並安裝
- 安裝耗時較長
- 不要安裝在
C:\Program Files
等路徑包含空格的位置,不然後續編譯中會報錯。 - (可選)配置Windows Terminal終端:(最好加上管理員許可權,如採用 gsudo)
<...>\msys2_shell.cmd -defterm -no-start
- 給 msys2 安裝
diffutils
和m4
,不然後續編譯會報錯:pacman -S diffutils pacman -S m4
- 安裝 Rust(到 Windows 系統中即可),參照官網(安裝時選
2) Customize installation
,將默認為x86_64-pc-windows-msvc
的基礎編譯工具更換為x86_64-pc-windows-gnu
,其他選項採用默認。參考),並添加到 msys2 的環境變數中:export PATH=$PATH:/c/Users/<用戶名>/.cargo/bin
- 同樣的,將 Windows 下
gcc.exe
所在的文件夾也添加到 msys2 的環境變數中,(不然後續編譯會報錯)格式見上。若未安裝,可自行查找安裝教程。 - 克隆程式碼庫:
//github.com/mthom/scryer-prolog.git
至任意文件夾(最好到msys2的home/<username>
文件夾里),將 msys2 終端cd
到該目錄中。 - 編譯:在 msys2 終端中執行
cargo run --release
,如果嫌輸出資訊太少感覺卡住了可以加上-vv
選項- 編譯過程耗時較長,其中最後的
openssl
和gmp-mpfr-sys
編譯耗時最長,前面講到的「不做就會報錯」的「報錯」基本都是在編譯gmp-mpfr-sys
時產生的。
- 編譯過程耗時較長,其中最後的
- 編譯完成後
<程式碼庫路徑>/target/release/scryer-prolog.exe"
即為輸出。(就是一個單文件,無需額外的庫文件了)
最後輸出的單.exe
文件有133MB,我覺得太大了,更成熟的SWI-Prolog只佔用44MB(v8.4.0版本)。
作者的README中還提到可以為 scryer-prolog 生成一個.msi
安裝包,不過我試了一下,生成的安裝包就只是簡單地把scryer-prolog.exe
複製到了C:\Program Files
中的一個文件夾里,沒啥意義。