前几天升级了 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 大版本升级就完成了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。