在 centos 中使用 kerl 安装 erlang 时出现加密错误

Posted

技术标签:

【中文标题】在 centos 中使用 kerl 安装 erlang 时出现加密错误【英文标题】:crypto error when installing erlang with kerl in centos 【发布时间】:2016-07-21 16:42:29 【问题描述】:

我一直在尝试通过kerl安装erlang16。我收到以下错误:

 Uncaught error in rebar_core: 'EXIT',
 undef,
 [crypto,start,[],[],

这一直是很多人之前遇到的问题,但这些解决方案都不适合我。

我是按照这个做的: Unable to install erlang on cent os 但失败了

如果我这样做了,crypto:start(),它不会返回我好的。有人可以帮忙吗。谢谢

错误信息:

  1> crypto:start().
  ** exception error: undefined function crypto:start/0
  2> 
  =ERROR REPORT==== 2-Apr-2016::07:28:13 ===
  Unable to load crypto library. Failed with error:
  "load_failed, Failed to load NIF library: 
 '/usr/local/lib/erlang/lib/crypto-       3.0/priv/lib/crypto.so: undefined  symbol: EC_GROUP_new_curve_GF2m'"
  OpenSSL might not be installed on this system.

  =ERROR REPORT==== 2-Apr-2016::07:28:13 ===
  The on_load function for module crypto returned error,
                                             load_failed,
                                              "Failed to load NIF library:  '/usr/local/lib/erlang/lib/crypto-3.0/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'"

这样做很好:

 Eshell V5.10.2  (abort with ^G)
 1> application:start(crypto).
 ok

【问题讨论】:

***.com/q/20166216/409228 的重复,遗憾的是没有可接受的答案。 不是重复的,请看我的回答下方评论中的错误信息。 或者它可能是重复的,但这个问题和错误是特定于 CentOS 的。另一个问题包含不同的错误消息。要使其重复,您可能需要将此问题的详细信息添加到另一个问题。 应用程序可能正在启动,但 crypto 模块是一个 Erlang NIF,直到您从 crypto 调用函数时才会加载。尝试拨打例如crypto:info_lib(). 以查看它是否有效。它应该显示它正在使用的 OpenSSL 版本。 【参考方案1】:

您的 Erlang 是在没有 OpenSSL 的情况下构建的。从源代码构建 Erlang 时,未安装或启用 OpenSSL。构建 crypto 应用程序需要 OpenSSL。请参阅Erlang installation guide。

检查crypto 是否已构建的最简单方法就是像您一样尝试启动crypto

1> application:start(crypto).
ok

您可以尝试从Erlang Solutions 下载预编译版本吗?否则,您将需要找出为什么 kerl 没有选择 OpenSSL(如果已安装)。也许尝试验证configure 或编译日志。

【讨论】:

如果我直接从erlang.org安装(erlang r16b01)会有什么不同。 当然不是,只是在 erlang.org 上有非常有限的一组操作系统可供您下载安装程序。但是,如果您可以为您的系统找到一个软件包,那就没关系了。请注意,您可能需要单独安装 OpenSSL 才能正常工作。即使 Erlang 已使用 OpenSSL 编译,仍需要安装它才能使加密应用程序正常工作。 我做了 sudo yum install openssl-devel 然后从 erlang.org 安装了 erlang R16B01 问题仍然存在。 application:start(crypto) 返回正常,但 crypto:start() 失败。还有,先安装openssl,再安装erlang。 application:start(crypto).crypto:start(). 相同。见github.com/erlang/otp/blob/OTP-18.3/lib/crypto/src/… 所以它已经在工作了。如果不是,请发布确切的错误消息。 无法加载加密库。失败并出现错误:“load_failed,无法加载 NIF 库:'/usr/local/lib/erlang/lib/crypto-3.0/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'” OpenSSL 可能未安装在此系统。模块 crypto 的 on_load 函数返回 error, load_failed, "Failed to load NIF library: '/usr/local/lib/erlang/lib/crypto-3.0/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'" ** 异常错误:未定义函数 crypto:start/0

以上是关于在 centos 中使用 kerl 安装 erlang 时出现加密错误的主要内容,如果未能解决你的问题,请参考以下文章

在 CentOS 7 上安装 RabbitMQ

Centos7安装并配置rabbitmq

CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)

Win10 Ubuntu子系统添加环境变量

RabbitMQ安装及配置(2021.05.29)

RabbitMQ安装及配置(2021.05.29)