5
5

More than 5 years have passed since last update.

OSXでrbenv使ってて、vimをソースからビルドしてインストールすると、SEGVが発生してvimが落ちてしまう

Posted at

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

以上です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5