[elixir! #0079] erlang 版本升級 22 -> 24

Ljzn 發表於 2021-10-20

前幾天升級了 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 大版本升級就完成了。