読者です 読者をやめる 読者になる 読者になる

ravelll の日記

よしなに

続 cpsm で Vim: Cought deadly signal ABRT が出てしまう

tech vim

会社で使っている Mac でも同様の問題が発生し、記事の方法に従ったところ解決しなかったので改めて調査して解法を探りました。

検証環境

python の実行ファイルと優先度は下の通り。

$ where python
/Users/t308/.pyenv/shims/python
/usr/local/bin/python
/usr/bin/python

検証

1. 普通に install.sh を使ってインストール

まず README に従って cpsm のリポジトリにある install.sh を実行してインストールしてみる。install.sh は素朴な shell script で、build ディレクトリを作成して cmake -> make install している。

実行して cmake のデバッグメッセージを眺めると、Pythonインタプリタは正しく探せているものの、ライブラリは System Python のライブラリを参照している。

$ ./install.sh
...
...
-- Found PythonInterp: /Users/t308/.pyenv/shims/python2.7 (found version "2.7.11")
-- Found Python executable: /Users/t308/.pyenv/shims/python2.7
-- Found Python version: 2.7.11
-- Found Python library: /usr/lib/libpython2.7.dylib
...
...

出力されたオブジェクトファイルがリンクしている Python ライブラリを見てみると、System の Python framework を使っている。

$ otool -L build/cpsm_py.so
build/cpsm_py.so:
        /Users/t308/.vim/bundle/cpsm/build/cpsm_py.so (compatibility version 0.0.0, current version 0.0.0)
        /System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.10)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

この状態で CtrlP してみると、以下のような出力とともに Vim が終了する。

Vim: Caught deadly signal ABRT
Vim: Finished.
[1]    51311 abort      env LANG=ja_JP.UTF-8 vim "$@"

2. cmake のオプション値を指定して直接ビルドする

次に、 install.sh を使わずに、cmake の PYTHON_LIBRARY 変数の値を直接指定してビルドしてインストールしてみる。

$ cd cmake
$ cmake -DPYTHON_LIBRARY=/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib ..
...
...
-- Found PythonInterp: /Users/t308/.pyenv/shims/python2.7 (found version "2.7.11")
-- Found Python executable: /Users/t308/.pyenv/shims/python2.7
-- Found Python version: 2.7.11
-- Found Python library: /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib
...
...

$ make install

再度オブジェクトファイルのライブラリを確認してみる。

$ otool -L autoload/cpsm_py.so
autoload/cpsm_py.so:
        cpsm_py.so (compatibility version 0.0.0, current version 0.0.0)
        /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

それらしいあれになりましたね。CtrlP してみても元気に動きます。めでたいと思います。

これでも解決しないときは vim 自体をビルドし直すと解決する場合もあるようです。自分は Homebrew で入れているので以下のような感じに(オプションはよしなに)。

$ brew reinstall vim --with-lua --with-luajit --with-mzscheme --HEAD