Cannot start riak: “Failed to load erlang_js_drv.so

问题

在osx 10.10上安装riak,一直跑不起来,提示错误(详见stackoverflow):

[error] Error loading "erlang_js_drv": "dlopen(/User/keroro/lib/erlang_js-1.2.2/priv/erlang_js_drv.so, 
2): no suitable image found.  Did find:\n\t/Users/keroro/lib/erlang_js-1.2.2/priv/erlang_js_drv.so: mach-o, but wrong architecture"

[error] CRASH REPORT Process erlang_js_sup with 0 neighbours exited with reason: bad return value: {error,{load_error,"Failed to load erlang_js_drv.so"}} in gen_server:init_it/6 line 332

[error] CRASH REPORT Process <0.115.0> with 0 neighbours exited with reason: bad return value: {error,{load_error,"Failed to load erlang_js_drv.so"}} in erlang_js:start(normal, []) in application_master:init/4 line 138

解决:用gnu-gcc编译erlang

造成这个问题的具体原因未知,只知道是因为编译erlang和riak的编译器不一致造成的。我之前是用llvm-gcc编译erlang,而gnu-gcc编译riak,所以才提示“wrong architecture”!我之后重新用gnu-gcc编译erlang,再用新编译好的erlang编译riak,就能够正常跑了。

其实参照Installing Erlang 和 Riak Installing on Mac OS X
就可以了,只不过我之前没找到这篇文档,被坑得比较久而已。

  1. 安装gnu的gcc
osx上默认的gcc一般都是llvm-gcc,可以执行`gcc --version`看一下,如果是“Apple LLVM version”的话就是llvm-gcc。
  
我偷懒,直接装xcode,xcode包里面含有gnu的gcc。当然你也可以不安装xcode,直接装gnu的gcc,不过我没尝试过。
  1. 借助kerl来安装的。
    参照Installing Erlang,系统在10.6以及更新的,在~/.kerlrc里面添加下面选项:

    ./configure --disable-hipe --enable-smp-support --enable-threads --enable-kernel-poll --enable-darwin-64bit

之后的步骤就是正常装erlang了。

    kerl build R15B03 R15B03
    kerl install R15B03 path-to-installation-toR15B03

花絮

就上面这句“wrong architecture”误导我,我还以为是因为我的系统太新了,riak跑不起来,所以一直是ssh到另外一台机子上跑riak,弄得我测试什么的都巨麻烦。

不过说真的,这种很容易碰见的问题,在网络上搜竟然没多少结果,可见riak确实不算太流行。

另外,还得感谢ntalbott的提醒

你可能感兴趣的:(Cannot start riak: “Failed to load erlang_js_drv.so)