neovim インストールに失敗した時の解決方法 / How to resolve neovim install trouble with error message dyld: Library not loaded: @rpath/libmsgpackc.2.dylib

neovim インストールに失敗した時の解決方法 / How to resolve neovim install trouble with error message dyld: Library not loaded: @rpath/libmsgpackc.2.dylib

小ネタです。春だし(違)vim のパッケージを整理整頓しようと思い立ったら、なんだか vim のパッケージ管理は neobundle から dein とかいう新世代に変わっており、しかも vim 自体も neovim に世代交代しているそう。
brew で簡単にインストールできるだろ、と思ってたら意外と手こずったのでメモ残しておく。

** Sorry, this note is Japanese only, but please take a look at some code snippets. Hope it helps you.

参考:GitHub - neovim/neovim: Vim-fork focused on extensibility and usability.(公式 github repository )

その他のトラブルに見舞われている人はこちらも参考にしてみてください。
datalove.hatenadiary.jp

おさらい: neovim ってなに?

公式 github repository によると、拡張性とユーザビリティの向上を意図して vim から fork したエディタという位置づけ。曰く、

Neovim is a project that seeks to aggressively refactor Vim in order to:
- Simplify maintenance and encourage contributions
- Split the work between multiple developers
- Enable advanced UIs without modifications to the core
- Maximize extensibility

ということで、これらの目標に向かってリファクタリングしつつ、積極的に開発してる模様です。
Wikipedia によると 2014 年にプロジェクトがスタートされた、とのことなので、もう2年は経つんですね。

前提:なぜ neovim のインストールに失敗したのか?

わたしが失敗したのは理由があります。

  • 今つかっている環境( macOS Sierra + システムアドミンによるカスタマイズ?)だと、ユーザー権限で /usr/local/ に書き込みができない
  • しかも、Yosemite あたりから homebrew が root でできなくなってる・・・
  • 実行だから homebrew をホームディレクトリ配下にインストールした
  • neovim を homebrew でインストールしようとしたらライブラリのパスが通らない -> インストール失敗

という経緯です。ふつうにデフォルト設定で homebrew を使っているひとなら、

$ brew install neovim/neovim/neovim  

でカンタンにインストールできると思います。が、わたしの場合はライブラリがロードできない、というエラーメッセージとともにビルド途中で止まりました。

dyld: Library not loaded: @rpath/libmsgpackc.2.dylib  

解決方法

調べたところ libmsgpackc.2.dylib は、依存パッケージである msgpack のライブラリのようですが、これもまた homebrew でインストールされているため、ホームディレクトリ配下にインストールされてます。
そのため、msgpack (及び他の依存パッケージも)ライブラリのパスが通らなくてビルドでコケる、という状態でした。
brew install 時に cmake の環境変数 CMAKE_LIBRARY_PATH と CMAKE_INCLUDE_PATH を渡したかったんだけど、その方法がわからず・・・
結局、通常のライブラリパス /usr/local/lib とヘッダーファイルのパス /usr/local/include に homebrew のライブラリ・ヘッダーのパスのシンボリックリンクを貼りました。

$ sudo cp -r /usr/local/lib /usr/local/X_lib # 念のため既存の lib を退避  
$ sudo /usr/local/lib/pkgconfig /usr/local/lib/X_pkgconfig # pkgconfig も退避  
$ sudo mv /usr/local/lib/pkgconfig /usr/local/lib/X_pkgconfig  
$ sudo ln -s ~/opt/homebrew/lib/* /usr/local/lib/  
## ホーム/opt/homebrew/lib 以下を /usr/local/lib 以下にシンボリックリンク  
## ( ~/opt/homebrew/include/* も同様に /usr/local/include にシンボリックリンク)  
$ brew install neovim/neovim/neovim  

これでとりあえずインストールできました。もともとの /usr/local/lib を汚すのってなんだかイヤだな … と思いつつ。
export CMAKE_LIBRARY_PATH=$HOME/opt/homebrew/lib とか、brew でのインストールを諦めて make CMAKE_EXTRA_FLAGS= … とかいろいろ試したんだけどな …

Vim とか環境づくり関係の記事

datalove.hatenadiary.jp datalove.hatenadiary.jp datalove.hatenadiary.jp datalove.hatenadiary.jp datalove.hatenadiary.jp datalove.hatenadiary.jp datalove.hatenadiary.jp