前幾天升級了 elixir 版本, 今天想著乾脆把 erlang 的版本也升級一下好了。聽說 OTP24的效能有很大提升。升級之後一編譯,果然又報了好些警告&錯誤,我們來一一解決。
1
** (UndefinedFunctionError) function :crypto.block_encrypt/3 is undefined or private, use crypto:crypto_one_time/4 or crypto:crypto_init/3 + crypto:crypto_update/2 + crypto:crypto_final/1 instead
首先是 :crypto
模組的api變了,變更的原因據說是OpenSSL 的 api變更。http://erlang.org/doc/apps/cr... 還好在網上搜尋了一番,找到了解決的方法。
使用 :crypto.crypto_one_time
函式替代即可,最後一個引數是一個布林值,true 代表加密, false 代表解密。具體用法還是看文件吧。
2
另外 :crypto.hmac
函式也沒有了。統一改用 :crypto.mac(:hmac, ...)
。具體參考函式文件。手動替換一下就可以了。
3
由於上面的這些原因,一些依賴庫也用不了了。好在 elixir 社群常用的庫維護都很頻繁,到 hex.pm 上找到最近版本,更新一下就好了。
某些 NIF 庫在 24 下無法編譯通過了,原因是 24 去掉了 erl_interface 這個東西。找到類似 -lerl_interface
這樣的選項,直接刪除就可以了。不行的話試試加上 -lei
。還是不行就看看文件吧。
4
這樣,一次愉快的 erlang 大版本升級就完成了。