home prev next

はじめに

nano とはキャラクタユーザインターフェースを持つテキストエディタです。
一般的な vi や Emacs とは違い、操作が直観的なため Windowsユーザでも比較的容易に扱うことができると思います。

現在の最新版は nano-2.1.7 であり、安定版が nano-2.0.9 です。


インストール

今回、ターゲットにしたマシンは Sparc版 Solaris 10 です。

先日 Debian にて何の問題もなく nano をコンパイルしインストールできたが(configure + make + make install で OK)、
今回は同じオペレーションをしてもコンパイルエラーが発生してインストールができなかった。

fig.1-1: nanoインストール失敗
# tar zxvf nano-2.1.7.tar.gz
# cd nano-2.1.7
# ./configure --enable-all
# make
...
gcc -g -O2 -o nano browser.o chars.o color.o cut.o files.o global.o help.o move.o nano.o prompt.o rcfile.o search.o text.o utils.o winio.o -lncurses
未定義の                        最初に参照している
シンボル                            ファイル
initscr32                           nano.o
w32addch                           prompt.o
w32attron                           browser.o
w32attroff                          browser.o
ld: 重大なエラー: シンボル参照エラー。nano に書き込まれる出力はありません。 collect2: ld returned 1 exit status
make[2]: *** [nano] Error 1
make[2]: Leaving directory `/export/home/dnc/nano-2.1.7/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/export/home/dnc/nano-2.1.7'
*** Error code 2
make: Fatal error: Command failed for target `all'

フムフム ... 関数が幾つか足りないようである。
場合によってはエラーの箇所をコメントアウトしてしまっても良いと考えたので、
どのような処理を行っているか grepコマンドで確認したところ ... ない! ... どこにもない。
リンク時に見つからないと言っている関数はどこからも呼ばれていないのである。
念のため "*.[ch]" だけではなく configure や Makefile なども見たが、該当する関数はどこにも存在しなかった。

同じようなケースはないかググってみたけど、誰も居なかった(外人さんのサイトに 1人居たけど未解決)。
諦めて「安定板(2.0.9)」や「旧版(1.3.12)」を試してみたが、やはり前述のエラーが発生してロードモジュールが作成できない。

そもそも initscr32 はさて置き、w32addch、w32attron、w32attroff の "w32" って何か嬉しくないキーワードなので、
w32 を除いて grepコマンド実行してみました。
すると、grep の結果が表示され該当箇所がみつかりました(これらは libncurses.a で addch、attron、attroff が定義されていた)。
こうなると怪しいのは curses.h である。
/usr/local/include/curses.h を見たらこんな怪しいマクロがズラリ。

	#define      initscr         initscr32
	#define      newterm         newterm32
	#define      waddch          w32addch
	#define      wechochar       w32echochar
	#define      pechochar       p32echochar
	#define      winsch          w32insch
	#define      vidputs         vid32puts
	#define      vidattr         vid32attr
	#define      wattroff        w32attroff
	#define      wattron         w32attron
	#define      wattrset        w32attrset
	#define      acs_map         acs32map
	#define      box             box32

... おいおい ... 何やってんだよぉ ...

このマシンは管理対象外で、システムファイルには変更を加えることが面倒だったので、
/usr/local/include/curses.h をローカル環境にコピーして前述の問題個所を削除しました。

fig.1-2: nanoインストール
# ./configure --enable-all
# make

make install はお好みでどうぞ。


実行

早速、nano を実行したところエラーとなってしまいました。
是は実行時に libncurses.so.5 をリンクようとしたが該当するライブラリが見つからなかった時に発生するエラーである。

fig.2-1: nanoの実行エラー
# nano
# ld.so.1: nano: 重大なエラー: libncurses.so.5: open に失敗しました: ファイルもディレクトリもありません。
強制終了

環境変数 LD_LIBRARY_PATH をセットして、気を取り直して実行 ... できた!


home prev next

Last-modified: Mon Dec 15 12:25:51 JSP 2008
Site admin:りお

Powerd by ninjatools

ふつう このページは Another HTML-lint gatewayふつうと判断されました。