加载函数失败:cberl\u nif(Erlang)

加载函数失败:cberl\u nif(Erlang),erlang,couchbase,erlang-shell,Erlang,Couchbase,Erlang Shell,我正在使用 我当前的应用程序版本是1.2.1。运行良好。我创建了一个新的1.2.2版,升级很好。但当我启动一个新实例时,它在1.2.2上失败了。它不断抛出cberl错误 如果我启动上一个版本1.2.1,然后再次升级到1.2.2,那么它可以正常工作。但从零开始并不是这样 我的应用程序(比如测试)启动失败。 我使用的命令:bin/testconsole 使用的OTP版本:18.2。 在OTP 18.2上编译。 Linux版本:3.2.0-4-amd64#1 SMP Debian 3.2.63-2 x

我正在使用

我当前的应用程序版本是1.2.1。运行良好。我创建了一个新的1.2.2版,升级很好。但当我启动一个新实例时,它在1.2.2上失败了。它不断抛出cberl错误

如果我启动上一个版本1.2.1,然后再次升级到1.2.2,那么它可以正常工作。但从零开始并不是这样

我的应用程序(比如测试)启动失败。 我使用的命令:
bin/testconsole

使用的OTP版本:18.2。
在OTP 18.2上编译。
Linux版本:3.2.0-4-amd64#1 SMP Debian 3.2.63-2 x86_64 GNU/Linux

完整错误消息:

erl_crash.dump 口号:内核pid终止(应用程序控制器)({应用程序启动失败,内核,{关闭,{启动子级失败,内核安全支持,{加载函数失败,cberl_nif}},{内核,启动,[normal,[]}} 系统版本:Erlang/OTP18[erts-7.2][source][64位][smp:16:16][async threads:10][kernel poll:true]

到目前为止我尝试过的事情:


1) 我查了我的libcouchbase。它已安装。

看起来cberl\u nif是用两个不同版本的Erlang编译的

您正在运行的Erlang版本似乎是18.2,用于编译cberl_nif的版本是18。因此,NIF接口将有不同的版本,导致出现错误消息


因此,如果您从头开始重建,请确保所有缓存都已清理并重新重建。尤其是所有的.so和.o文件。

因此,我能够解决这个问题。我是erlang库的一员。多亏了@fredrikvensson,我才得以解决这个问题。我本来打算使用OTP 15,但有17个。

使用OTP版本as 18.2也会在控制台中报告OTP版本18。。。在任何情况下,当nif接口的版本不兼容时,通常会出现此故障。这通常也是通过清除所有二进制文件来解决的。