RubyでTmailをインストールしようとすると以下のエラーがでるのですが何故でしょうか?

Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/tmail-1.1.1/ext/tmail/base64/ge
m_make.outのファイルは空でした。
Rubyのバージョンは1.8.5です。ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]


C:\Documents and Settings\garyo>gem install tmail
Building native extensions. This could take a while...
can't find header files for ruby.

ERROR: While executing gem ... (RuntimeError)
ERROR: Failed to build gem native extension.
Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.8/gems/tmail-1.1.1 fo
r inspection.


Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/tmail-1.1.1/ext/tmail/base64/ge
m_make.out

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2007/12/01 07:30:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kazutanaka No.1

回答回数4ベストアンサー獲得回数1

ポイント60pt

mswin32版ruby 1.8.5の、拡張子省略時の

バッククオート動作仕様が原因のようです。


拡張子を省略したbatコマンドが、

・パス内にあれば、batを補ってくれる

・カレントディレクトリなら、batを補わない


tmail gemは、拡張ライブラリのダミービルド用に

何もしないmake.batを作成します。

しかし、ruby1.8.5で(`make`)としても、

このmake.batが見つけられないため、

何も出力せずに終了してしまい、

ログも空のままになります。


次のいずれかで解消できると思います。


・ruby 1.8.6に移行する

・カレント('.')をPATHに追加する

・make環境変数で強制的にmake.batを指定する


3番目なら、次にようにします。

>set make=make.bat

>gem install tmail


以下のページによるとwin版のtmail gemは、

ダミーのmake.batを作成して拡張ライブラリを

ビルドしないのが意図した動作のようです。


http://tmail.rubyforge.org/quickstart/index.html

id:garyo

ありがとうございますm(__)m。

そうだったんですね。

試してみましたが、やはりエラーになりました。

C:\project\ruby>set make=make.bat

C:\project\ruby>gem install tmail

Updating metadata for 20 gems from http://gems.rubyforge.org

....................

complete

Building native extensions. This could take a while...

ERROR: Error installing tmail:

ERROR: Failed to build gem native extension.

C:/ruby-1.8/bin/ruby.exe extconf.rb install tmail

can't find header files for ruby.


Gem files will remain installed in C:/ruby-1.8/lib/ruby/gems/1.8/gems/tmail-1.1.

1 for inspection.

Results logged to C:/ruby-1.8/lib/ruby/gems/1.8/gems/tmail-1.1.1/ext/tmail/base6

4/gem_make.out

C:\project\ruby>

【gem_make.out】の中身

C:/ruby-1.8/bin/ruby.exe extconf.rb install tmail

can't find header files for ruby.

--------------------------------------------------------------------

原因が理解できました。

1.ActiveScriptRubyの標準インストール

2.VisualC++などのコンパイラがインストールされている

この場合に発生するわけですね。

VC++などのコンパイラが無ければ、make.batなどダミーでextを無効化するのですが

VC++が入っているとextをコンパイルしようとします。

しかしActiveScriptRubyの標準インストールではヘッダーが入らないのでRuby.hが無くてエラーになります。

対策としては 以下のASRDev18.msiをインストールして「gem install tmail」を実行すると問題なく入ります。

http://arton.hp.infoseek.co.jp/ASRDev18.msi

色々詳しく説明頂きありがとうございました。

2007/12/01 07:29:25
  • id:kazutanaka
    次のメッセージが出ているのは、
    コンパイラが起動しているんでしょうかね。
    それだとgem作者の意図から外れてしまいます。

    "can't find header files for ruby."


    RUBY_PLATFORMにmswinが含まれると、
    次のようなダミーのMakefileが作られるはずなのです。

    --
    all:
    install:
    --

    ちなみにどんなMakefileになってますか?


    もしかするとRubyGemsのバージョンが違うのかもしれません。
    うちのは"0.9.4"でした。


    gemパッケージにこだわらないのであれば、
    gems/1.8/gems/tmail*/lib/* を site_ruby/1.8/以下に
    コピーすればそのまま使えるはずです。
  • id:garyo
    >ちなみにどんなMakefileになってますか?
    makeファイルは以下の通りです。

    >gemパッケージにこだわらないのであれば、
    Tmail自体は手動でインストールできました。自分が公開するプログラムがTmailを使っているので
    公開プログラムを使う人にどう説明しようかと考えている所です。


    後、本業が組み込みプログラマなのでPCには各種コンパイラが入っているかも知れません。
    make -vと打つと
    MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
    nmake -vと打つと
    Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
    とでます。


    #
    # ext/tmail/Makefile
    #

    .PHONY: scanner_c base64 clean distclean

    all: scanner_c base64

    scanner_c: scanner_c/Makefile
    cd scanner_c; $(MAKE)
    scanner_c/Makefile: scanner_c/extconf.rb
    cd scanner_c; ruby extconf.rb

    base64: base64/Makefile
    cd base64; $(MAKE)
    base64/Makefile: base64/extconf.rb
    cd base64; ruby extconf.rb

    clean:
    cd base64; $(MAKE) clean
    cd scanner_c; $(MAKE) clean

    distclean:
    cd base64; $(MAKE) distclean
    cd scanner_c; $(MAKE) distclean
  • id:garyo
    ちらっと見てみましたが、Perl,Python,Ruby,MinGW,Cygwin,Java,C++Builer,VisualC++と組み込みマイコン用コンパイラがインストールされています。
    インストーラーには過酷な環境かも知れません。
  • id:kazutanaka
    見せて欲しいのは ext/tmail/Makefile ではなく、
    gemが生成する ext/tmail/base64/Makefile です。


    元々、makeが入っていたらそちらが使われるので、
    最初の回答は外れでしたね・・・。
  • id:garyo
    >見せて欲しいのは ext/tmail/Makefile ではなく、
    >gemが生成する ext/tmail/base64/Makefile です。
    そうでしたか。すみません。base64内にはmakefileは無いようです。

    >元々、makeが入っていたらそちらが使われるので、
    ここらへんが原因かも

    C:\ruby-1.8\lib\ruby\gems\1.8\gems\tmail-1.1.1\ext\tmail\base64 のディレクトリ

    2007/11/30 19:49 <DIR> .
    2007/11/30 19:49 <DIR> ..
    2007/11/30 18:37 6,258 base64.c
    2007/11/30 18:37 88 depend
    2007/11/30 19:49 0 dir.txt
    2007/11/30 18:37 1,055 extconf.rb
    2007/11/30 18:37 84 gem_make.out
    2007/11/30 18:37 38 MANIFEST
  • id:winebarrel
    base64.soとscanner_c.soは依存しているライブラリがないので、VC8でもさくっとビルドできました。
    VC6が入っているなら、ASRDev18.msiをインストールすれば簡単にビルドできるんじゃないでしょうか?

    http://arton.hp.infoseek.co.jp/indexj.html
  • id:kazutanaka
    まず、パスをmswinだけにしておかないと危険だと思います。
    特にcygwinとかが気になる。

    mswin版Rubyだと、extconf.rbがbase64/以下に
    make.bat,nmake.bat,Makefileの3ファイルを作るはず。

    ext/tmail/base64/{make.bat, nmake.bat, Makefile}

    直接、extconf.rbを実行するとどうなります?

    >cd ext/tmail/base64/
    >ruby extconf.rb

    ext/tmail/base64/Makefileができていないのは、
    Config::CONFIG['arch']に'mswin'が含まれないからだと思う。
  • id:garyo
    winebarrelさん、情報ありがとうございます。
    kazutanakaさん
    >まず、パスをmswinだけにしておかないと危険だと思います。
    >特にcygwinとかが気になる。
    コンパイルしなくてもTmail自体は使えているので
    特にコンパイルできなくても困ってはいません(^^;)
    自分が公開するプログラムでTmailを使っているので
    他の方にTmailのインストールを説明するときに、rubygemsでインストールできると助かると思っています。


    >直接、extconf.rbを実行するとどうなります?
    こんな感じになります。
    C:\ruby-1.8\lib\ruby\gems\1.8\gems\tmail-1.1.1\ext\tmail\base64>extconf.rb
    can't find header files for ruby.

    C:\ruby-1.8\lib\ruby\gems\1.8\gems\tmail-1.1.1\ext\tmail\base64>ruby -v
    ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
  • id:garyo
    Tmail自体は以下で紹介して頂いた方法で自分のPCにはインストールしています。
    説明不足ですみません。
    http://rubyist.g.hatena.ne.jp/hiro-ueda/20071010/1192024253

    ruby setup.rb config --without-ext
    ruby setup.rb setup
    ruby setup.rb install

    最悪 
    「gem install tmailがWindowsでエラーが出る方は上記の方法でインストールしてください」
    と注記しようかと思っています。
  • id:kazutanaka
    多分、ext/tmail/base64/extconf.rb 先頭の
    require 'mkmf' でこけてますね。

    irbを起動して、次の1行でも同じエラーになるはず。
    >require 'mkmf'

    lib/ruby/1.8/i386-mswin32/ruby.h が無いのかも。

    rubyforgeからダウンロードしたmswin版ruby1.8.5だと、
    上記の位置にruby.hがインストールされています。
  • id:garyo
    >rbを起動して、次の1行でも同じエラーになるはず。
    >>require 'mkmf'
    はい。

    irb(main):001:0> require 'mkmf'
    can't find header files for ruby.

    >lib/ruby/1.8/i386-mswin32/ruby.h が無いのかも。
    確かにないですね。

    C:\ruby-1.8\lib\ruby\1.8\i386-mswin32 のディレクトリ

    2007/11/30 20:51 <DIR> .
    2007/11/30 20:51 <DIR> ..
    2006/12/25 16:52 57,438 bigdecimal.so
    2007/11/29 17:43 <DIR> digest
    2006/12/25 16:52 20,566 digest.so
    2007/11/30 20:51 0 dir.txt
    2006/12/25 16:52 81,998 dl.so
    2006/12/25 16:52 20,574 enumerator.so
    2006/12/25 16:52 20,560 etc.so
    2006/12/25 16:52 20,564 fcntl.so
    2006/12/25 16:52 24,660 iconv.so
    2007/11/29 17:43 <DIR> io
    2006/12/25 16:52 225,360 nkf.so
    2006/12/25 16:52 180,312 openssl.so
    2007/11/29 17:43 <DIR> racc
    2006/12/25 16:38 6,107 rbconfig.rb
    2006/12/25 16:52 24,666 readline.so
    2006/12/25 16:52 32,850 sdbm.so
    2006/12/25 16:52 45,142 socket.so
    2006/12/25 16:52 28,762 stringio.so
    2006/12/25 16:52 28,760 strscan.so
    2006/12/25 16:52 122,962 syck.so
    2006/12/25 16:52 94,292 tcltklib.so
    2006/12/25 16:52 36,953 tkutil.so
    2006/12/25 16:52 20,570 Win32API.so
    2006/12/25 16:52 65,626 win32ole.so
    2006/12/25 16:52 41,042 zlib.so
  • id:kazutanaka
    何かアクシデントでヘッダファイルだけ
    削除したり移動してしまった可能性はありませんか?

    mswin32版rubyの再インストールをすれば、
    解消すると思うのですが・・・。
  • id:garyo
    もしかすると「"make"コマンドが有効で」「ActiveScriptRuby 1.8.5」を使っている人がハマるのでしょうか?
  • id:kazutanaka
    >もしかすると「"make"コマンドが有効で」
    >「ActiveScriptRuby 1.8.5」を使っている人がハマるのでしょうか?

    makeコマンドはあっても大丈夫。
    ASRは別途ASRDevをインストールしないと、
    ruby.hは入らないみたい。

    mswin32でASRとは思いもしなかった。
  • id:kazutanaka
    どうもヘッダ無しで拡張ライブラリのビルドに
    失敗するのはよくあるみたいですね。

    "can't find header files for ruby" で検索すると、
    ActiveScriptRubyに限らずDebian,RedHat,CentOS,Mac OS Xと
    いろんなプラットフォームで、いろんなgemでの
    失敗が報告されてます。

    本体とヘッダを分けるパッケージングと、
    RubyGemsの依存関係が整合してなくても、
    利用者側からは分かりにくいんですね。

    もっと上位レベルの問題だと思うので、
    アプリやライブラリの作者がわざわざ
    断り書きする必要はないと思います。

    そうじゃないと大部分のgemに同じことを
    書かなきゃいけなくなる(笑)。

    Ruby 1.9でRubyGemsが標準添付になるので、
    いずれこの問題も解消されるのでは。
  • id:garyo
    やっとwinebarrelさんが言われていた「ASRDev18.msiをインストールすれば」という意味が分かりました。
    ヘッダーだけを入れたツールが公開されているわけですね。

    ASRDev18.msiをインストール後「gem install tmail」で問題なく入りました。
    echo Native exten
    sion will be omitted.
    Native extension will be omitted.
    Successfully installed tmail-1.1.1

    >そうじゃないと大部分のgemに同じことを
    >書かなきゃいけなくなる(笑)。
    希望を言えばTmailのgemを公開されている方にどなたかWindows用にコンパイルしたバイナリーを送って頂き
    gemで選択できるようにして頂ければと思います。


    私も以下の記載がなければTmailを使うのは諦めていたでしょう。
    http://rubyist.g.hatena.ne.jp/hiro-ueda/20071010/1192024253
    Tmailも早くRubyの標準ライブラリに採用されるといいのにと思います。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません