On_load_function_failed : cberl_nif (Эрланг)

Я использую https://github.com/chitika/cberl.

Моя текущая версия приложения 1.2.1. Который работает нормально. Я создал новую версию 1.2.2, которая отлично обновилась. Но когда я запустил новый экземпляр, на 1.2.2 произошел сбой. Он продолжает выдавать ошибку cberl.

Если я запущу свою предыдущую версию 1.2.1, а затем снова обновлю ее до 1.2.2, все будет работать нормально. Но начинать с нуля — нет.

Мое приложение (скажем, тест) не удалось запустить. Я использовал команду: bin/test console.

Используемая версия 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 ядра завершен (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_safe_sup,{on_load_function_failed,cberl_nif}}},{kernel,start,[normal,[]]}}} Версия системы : Erlang/OTP 18 [erts-7.2] [источник] [64-бит] [smp:16:16] [асинхронные потоки:10] [опрос ядра:true]

Вещи, которые я пробовал до сих пор:

1) Я проверил свой libcouchbase. Он установлен.


person anuj pradhan    schedule 03.06.2016    source источник


Ответы (2)


Похоже, cberl_nif скомпилирован с двумя разными версиями Erlang.

Версия Erlang, которую вы используете, похоже, 18.2, а версия, используемая для компиляции cberl_nif, — 18. Таким образом, интерфейс NIF будет иметь разные версии, что приведет к появлению сообщения об ошибке, которое вы видите.

Итак, если вы пересобираете с нуля, убедитесь, что все кеши очищены, и пересоберите заново. Особенно все файлы .so и .o.

person fredriksvensson    schedule 03.06.2016
comment
использование версии otp как 18.2 также сообщает о версии 18 OTP в консоли - person anuj pradhan; 03.06.2016
comment
хорошо... в любом случае эта ошибка обычно возникает при наличии несовместимых версий интерфейса nif. Что также обычно решается путем очистки всех двоичных файлов. - person fredriksvensson; 03.06.2016

Итак, я смог решить эту проблему. Я был несоответствием библиотеки erlang. Благодаря @fredrikvensson я смог решить эту проблему. Я собирался использовать OTP 15, но у меня было 17.

person anuj pradhan    schedule 06.06.2016