1

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


Ljzn
399 声望102 粉丝

网络安全;函数式编程;数字货币;人工智能