まつもと ゆきひろ@トヨタケーラムです.

In message "[ruby-list:23] ruby install on Solaris 2.4"
    on 95/12/25, Tetsunori Matsubara - Nihon Sun IR <Tetsunori.Matsubara / sun.co.jp> writes:
|
|今日 ruby をインストールして見ました。当初 fj.sources で配布されたものをコ
|ンパイルしたのですが、make test で core dump してしまいました。

bugつきのを流して申し訳ないです.

|以下は Solaris2.4 でのコンパイル結果を元にしています。他のシステムには当て
|はまらないかも知れません。
|
|1. ext/*/*.so が インストールされない。
|
|   make install の際に .././install-sh というコマンドが呼ばれていたが、実
|   際のコマンドは ../../install-sh に存在していたため、エラーとなった。
|
|   → ext/ ディレクトリに ../install-sh に対するシンボリックリンクを張って
|      対処。本来は install script を修正すべきところかと思います。

調べてみました.どうも,パスの調整にバグがあったようです.

|2. ext/tkutil/tkutil.so が作成されない。
|
|   ext/Setup に tkutil を指定していたが、なぜかコンパイルされない。他のモ
|   ジュールはコンパイルされていた。
|
|   → コンパイル時に PATH に wish が存在していないと、省略される事に気付く。
|      which wish で wish を見えるように設定して対処。

そうなんですよ.もっとよいチェックの仕方があれば良いんですけ
ど…(wishとwish4.0とblt_wishをチェックすれば良いのかなあ).

|3. lib/*.rb が base64.rb のみインストールされる。
|
|   make install 時に lib/*.rb が /usr/local/lib/ruby にインストールされる
|   が、なぜか base64.rb しかインストールされない。install-sh のバグ?
|
|   → Makefile を直接修正して、/usr/ucb/install を使用するように変更。

install.shの仕様がinstall(私が普段使っている方)と違うのが原
因でしょう.仕様の違いが問題にならないよう修正します.

|4. sample/dbm.rb が core dump する。
|
|   make test が成功した ruby で、sample/ ディレクトリの dbm.rb を実行させ
|   ると core dump してしまう。debugger で追いかけたりした結果、dlopen が実
|   行されていない事に気付く。config.log に
|
|Undefined                       first referenced
| symbol                             in file
|dlopen                              conftest.o  (/usr/lib/libdl.so.1?)
|ld: fatal: Symbol referencing errors. No output written to conftest
|
|   というエラーが出ていたので、どうも configure が dynamic load 無しと判断
|   しているらしい。
|
|   → configure はよくわからないので、defines.h に
|
|      #define USE_DLN_DLOPEN
|
|      を追加して再コンパイルしたところ、無事共有ライブラリをロードした。

そういえば,私もSolarisでコンパイルした時にdlopenを認識しま
せんでした.原因はいまだに不明ですが,マシンがあるので何とか
なると思います.これも調べてみます.

余談ですが,ELFでないLinuxでrubyを作る時には

 configure --with-dln-a-out

を実行してください.

|5. socket.so のコンパイルオプションに -lnsl が抜けている。
|
|   0.95b パッチを当てた直後の socket/extconf.rb は、
|
|have_library("inet", "gethostbyname")
|have_library("nls", "gethostbyname")
|have_library("nls", "gethostbyname")
|have_library("socket", "socket")
|have_header("sys/un.h")
|if have_func("socket")
|  create_makefile("socket")
|end
|
|    となっているが、これは、
|
|have_library("nsl", "gethostbyname")
|have_library("socket", "socket")
|have_header("sys/un.h")
|if have_func("socket")
|  create_makefile("socket")
|end
|
|   であるべき。上記のように変更後、再コンパイルして clnt.rb/svr.rb が動作
|   する事を確認しました。

どうやら

  have_library("inet", "gethostbyname")

が必要なマシンもあるようです(良く知らない).nlsを2回呼んで
いるのは意味が無いですね.このように変更しないとなにかエラー
になりました?

have_library("inet", "gethostbyname")
have_library("nls", "gethostbyname")
have_library("socket", "socket")
have_header("sys/un.h")
if have_func("socket")
  create_makefile("socket")
end

これで問題がありますか?

|6. Tk が動かない。(未解決)
|
|   sample/tkhello.rb を起動しても何も表示されない。ps でプロセスを見てみる
|   と wish -n /dev/null というプロセスがあるので、何かをしようとしていると
|   は思うのですが、何か足りないんでしょうか?皆様のところでは Tk うまく動
|   いていますか?

/dev/nullですか? なんだろうな.うちのSolarisマシンでテストし
てみます.

|とりあえず Tk 以外の機能は動くようになりました。これから時間を見つけていろ
|いろ試して見ようと思います。ゆくゆくは oraperl みたいな RDBMS の ext を作
|れたら楽しそうだなとか、考えています。

それ面白そうですね.情報提供はいくらでもします.

                                まつもと ゆきひろ /:|)