ravelll の日記

よしなに

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

会社で使っている 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

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

ほぼ下の Issue と同じ問題です。解決方法も概ね Issue のコメントにある通り。 何度か手元で発生していて、その度に解決方法を忘れていて手間取るのでメモ。 ちなみに OS は Yosemite で、バージョン10.10.5です。

問題はシステムの python に起因するらしい。自分と同じように既に Homebrew で python をインストールしているにも関わらず問題が起きる人は brew reinstall python してから cpsm をビルドし直すと解決すると思います。少なくとも自身の環境では解決しました。インストールしていない人はインストールして再ビルドすると直るのではと思います。

$ brew reinstall python
$ cd path/to/cpsm
$ ./install.sh

ビルドしてできた so ファイルを otool -L した結果はこんな感じ。

$ 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)

肉と正月

陸中に肉を買いに行ってきた。

陸中は平和台にある肉の卸売会社で、毎週土曜は一般向けに肉を売ってる。異常に安くてよいという話を聞いていて、気分になったので行ってきた。

開店時間らしい時間に行ってみたら50人くらい並んでて少し日和った。あれだけの列に物を買うために並んだのは iPhone5S 買ったとき以来だったかもしれない。開店時間についてやや曖昧に書いたのは、知人から11:30 ~ 11:45くらいのどこかで開くという店側のファジーっぷりを聞いていたからです。今回は11:35くらいに着いて、12:20くらいに店に入ることができた。

普段は一般に店を開いてないだけあって、店は15人前後しか入れない程度の広さだった。しかしながら棚には鶏豚牛の肉が土嚢の如く山積していて非現実的な良さがあった。値段も前評判通り異常に安くて、年始のようなめでたさを感じた。毎週土曜に正月やるのは大変だと思う。

欲しいものは沢山あったけど、結局牛すじ、豚バラ、豚小間を買った。恐らくどれもお弁当のおかずになることでしょう。久しぶりに回鍋肉が作りたくなってきた。うえも商店に寄って川中島の直汲み中取りを買って帰った。

f:id:ravelll:20160213135503j:plain