vimを起動するとこういうエラーが出る。
% vim
dyld: lazy symbol binding failed: Symbol not found: _rb_encdb_declare
Referenced from: /Users/kameda/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/x86_64-darwin12.2.0/enc/encdb.bundle
Expected in: flat namespace
dyld: Symbol not found: _rb_encdb_declare
Referenced from: /Users/kameda/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/x86_64-darwin12.2.0/enc/encdb.bundle
Expected in: flat namespace
Vim: Caught deadly signal SEGV
Vim: Finished.
zsh: segmentation fault vim
以下の条件が重なった時に、vim起動時にSEGVで落ちる。
- vimのconfigureで
--enable-ruby-interp
を指定している - rubyのdylibがない。(rubyビルド時に、
--enable-shared
を指定してない)
rubyのdylibが無いのが原因らしい。
http://attonblog.blogspot.jp/2013/02/ruby-193-rubyinterp-vim-brew.html
これを解消するため、rubyを--enable-sharedをつけてビルドしなおさないといけない。
また、ruby2.0からはrbenvの環境変数がCONFIGURE_OPTSからRUBY_CONFIGURE_OPTSに変わった。
ruby1.9.3ならCONFIGURE_OPTSを使う。
http://attonblog.blogspot.jp/2013/02/rbenv-enable-shared-ruby-200-p0.html
以下の手順で ruby と vim をビルドし直す。
まず ruby-build を使って ruby をインストール。
RUBY_CONFIGURE_OPTS='--enable-shared' rbenv install 2.0.0-p247
rbenv global 2.0.0-p247
あとは普通にvimをソースからインストール。
hg clone https://vim.googlecode.com/hg/ vim
cd vim
./configure --with-features-huge --enable-perlinterp --enable-pythoninterp --enable-rubyinterp
make && make install
--prefix
を指定してないと、/usr/local/bin に vim がインストールされる。
OSXのデフォルトでは $PATH
が /usr/local/bin より先に /usr/bin を見に行くので、/usr/local/bin を先に見に行くために、.bashrc か .zshrc などで $PATH
の順番を変えてやる必要があります。
.zshrc
export PATH=/usr/local/bin:$PATH
以上です。