emacs のコンパイル II

[戻る]

はじめに

じじいですので, 一旦手になじんだツールはよほどのことが無い限り使い続けます. emacs 20.7 もその一つです. 先日 debian にemacs20.7を走らせようと試みた所少しハマってしまったので, 顛末期を書いておきます.

現象

make all すると

Wrote ********/source/emacs-20.7/lib-src/fns-20.7.5.el
Dumping under names emacs and emacs-20.7.5-emcws
make[1]: *** [emacs] セグメンテーション違反です
make[1]: *** ファイル `emacs' を削除します
と出るのです. ソースを追いかけてみると unexelf.c の中の
memcpy (NEW_SECTION_H (nn).sh_offset + new_base,
  (caddr_t) OLD_SECTION_H (n).sh_addr,
  new_data2_size);
と書かれている部分で落ちています.

これらをキーワードにネットを彷徨ってみると segmentation fault, broken, cannot などなど不具合報告は多々見つかりますが, 対策はなかなか見つかりませんでした.

対策

しかし結局 ヒントを見つけました. 要約すると

  1. ./configure, make までして上述のようにセグメンテーション違反で落とす.
  2. src/Makefile を開いて "./temacs -batch -l loadup dump" と書かれている行を "setarch i386 -R ./temacs -batch -l loadup dump" と書き換える
  3. もう一度 make する
と上手くいきました.

debian ではその後の make install の際に /bin/install が無いと怒られますが, /usr/bin/install からシンボリックリンクを張れば上手くいきます. またカンマやピリオドの変換ルールを変えようと ~/.canna を置くと, 「canna と接続できない」といった類のエラーがでます. 結局 /etc/canna/default.canna を直接いじって対応しました.


2012.10