Emacsでirony-install-serverするのに必要な環境


Emacsで補完機能を使いたくて、色々やってたら、M-x irony-install-serverで失敗してたので、回避策をメモ

以下の先達の方の記事にも書いてある通り、llvm, clang, libclang-devのインストールが必要。
自分はlibeling-devをインストールしてなく、libclangや、clang/Index.hが見つからないと怒られてました。

C++11時代のEmacs C++コーディング環境

sudo apt update
sudo apt install llvm
sudo apt install clang
sudo apt install libclang-dev
sudo apt install make

Macの場合さらに以下の対策を実施

私のMacでは、Emacs上でM-x irony-install-serverすると以下のエラーが発生。
どうやらlibiconv.2.dylibに_libiconv_openシンボルが見つからないと怒られている様子。

Run Build Command(s):/opt/local/bin/gmake cmTC_ac6f9/fast                                   
/opt/local/bin/gmake -f CMakeFiles/cmTC_ac6f9.dir/build.make CMakeFiles/cmTC_ac6f9.dir/build
dyld: lazy symbol binding failed: Symbol not found: _libiconv_open
  Referenced from: /opt/local/lib/libintl.8.dylib
  Expected in: /usr/lib/libiconv.2.dylib

dyld: Symbol not found: _libiconv_open
  Referenced from: /opt/local/lib/libintl.8.dylib
  Expected in: /usr/lib/libiconv.2.dylib

gmake: *** [cmTC_ac6f9/fast] Abort trap: 6
Run Build Command(s):/opt/local/bin/gmake cmTC_895cb/fast                                   
/opt/local/bin/gmake -f CMakeFiles/cmTC_895cb.dir/build.make CMakeFiles/cmTC_895cb.dir/build
dyld: lazy symbol binding failed: Symbol not found: _libiconv_open
  Referenced from: /opt/local/lib/libintl.8.dylib
  Expected in: /usr/lib/libiconv.2.dylib

dyld: Symbol not found: _libiconv_open                                         
  Referenced from: /opt/local/lib/libintl.8.dylib                        
  Expected in: /usr/lib/libiconv.2.dylib

gmake: *** [cmTC_895cb/fast] Abort trap: 6                                                  

nmで確認してみると_iconv_openしか見当たらない

nm /usr/lib/libiconv.2.dylib
.
.
00000000000032fc T _iconv_close
0000000000001fdb T _iconv_open
0000000000003309 T _iconvctl
.
.

なので、gnu orgからライブラリのソースをダウンロードし、make
インストール先の--prefixは必要に応じて変更
私は、一旦テンポラリフォルダにインストールして、あとで、/usr/local/libにコピーした
以下は、ソースを$HOME/libiconv-1.15/展開して実施した場合

$ cd $HOME/libiconv-1.15/
$ ./configure --prefix=$HOME/libiconv-1.15/build
$ make
$ make install
$ cd $HOME/libconv-1.15/build
$ cp libiconv.dylib libiconv.2.dylib /usr/local/lib

再度nmで確認
きちんと_libconv_openが存在していることを確認

nm /usr/local/lib/libiconv.2.dylib
.
.
0000000000002310 T _libiconv_close
0000000000000da0 T _libiconv_open
0000000000002320 T _libiconv_open_into
.
.

無事irony-install-serverコマンドが成功した

.
.
.
-- Build files have been written to: /var/folders/nq/qgjv9z
Scanning dependencies of target irony-server
[ 12%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 25%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 37%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 50%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 62%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 75%] Building CXX object src/CMakeFiles/irony-server.dir/
[ 87%] Building CXX object src/CMakeFiles/irony-server.dir/
[100%] Linking CXX executable ../bin/irony-server
[100%] Built target irony-server
Install the project...
-- Install configuration: "Release"
-- Installing: /Users/MyHome/.emacs.d/irony/bin/irony-server

Compilation finished at Thu Apr 11 00:39:07