[ruby-list:50014] Re: pdfを扱うためのpopplerライブラリをrequireできない
From:
Masafumi Yokoyama <myokoym@...>
Date:
2014-11-20 16:12:24 UTC
List:
ruby-list #50014
Ruby/Poppler開発チームの横山です。
2014年11月20日 21:29 Yoshiizumi <yoshi@cup.sakura.ne.jp>:
> よしいずみといいます。
>
> 日本語 MS-Windows の環境で、pdfを扱うためのruby用ライブラリ poppler
> をgemでインストールして成功したのですが、requireしようとするとエラーが
> 発生します。
> 「こんなファイルが足りないのではないか」など、アドバイスがあればお願
> いします。
報告ありがとうございます!
私の手元でも再現したので、gemの問題だと思います。
> 実行環境は次のとおりです。
>
> ・OS: 日本語 Windows7, 64bit版
> ・ruby: 32bit用の 2.1.5 | 2.0.0
> ruby 2.1.5p273 (2014-11-13 revision 48405) [i386-mingw32]
> ruby 2.0.0p598 (2014-11-13) [i386-mingw32]
> ・poppler: poppler-2.2.3-x86-mingw32
>
> ruby 2.0.0 を使って、「require "poppler"」という1行だけのスクリプト
> を実行した時のエラーメッセージを下に掲げます。
> ruby 2.1.5 でも同じ結果でした。
> なお、poppler.so というファイルは、gem関係のディレクトリ下にちゃんと
> 存在します。
>
> −−−−−−−−
> C:/ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- poppler.so (LoadError)
> from C:/ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
> from C:/ruby200/lib/ruby/gems/2.0.0/gems/poppler-2.2.3-x86-mingw32/lib/poppler.rb:32:in `rescue in <top (required)>'
> from C:/ruby200/lib/ruby/gems/2.0.0/gems/poppler-2.2.3-x86-mingw32/lib/poppler.rb:28:in `<top (required)>'
> from C:/ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:135:in `require'
> from C:/ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
> from C:/ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:144:in `require'
> from A:/test.rb:1:in `<main>'
> −−−−−−−−
このエラーですが、実はpoppler.soの中身に不備があるときも出ます。
わかりにくいので、改善できるか検討してみます。
> ちなみに、popplerをgemでインストールした時の関連メッセージは次のとお
> り。
>
> −−−−−−−−
> Successfully installed poppler-2.2.3-x86-mingw32
> unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/2.0/poppler.so, skipping
> unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/2.1/poppler.so, skipping
> −−−−−−−−
>
> 実は、popplerだけをインストールしたわけではなく、rabbit(プレゼンテー
> ション用コマンド)をgemでインストールしました。その中で poppler もイン
> ストールされたものです。
> インストール時に Error のメッセージは出ず、関連のライブラリ一式がす
> べて Successfully でした。
> 何か別途入手する必要のあるファイルがあるのでしょうか。
> ご存じの方がいましたら、助言をお願いします。
RabbitはPDFを読み込むときにPopplerを使っていると思うのですが、
テキストを読み込んで動かす分には問題ないので気づいていませんでした。
で、poppler.soの中身を見たところ、以下のような問題でした。
* libpoppler-glib-8.dllはlibstdc++-6.dllに依存している
* libstdc++-6.dllが依存しているlibgcc_s_dw2-1.dllがglib2 gemの2.2.3に含まれていない
* poppler gemの2.2.3がlibstdc++-6.dllの_ZSt24__throw_out_of_range_fmtPKcz(0x0AF4)
を使おうとしているが、MinGWに含まれるlibstdc++-6.dllにはそのfunctionがないっぽい。
もしお急ぎでしたら、poppler gemと、依存しているgdk_pixbuf2 gem、glib2 gemの
バージョンを2.2.0に落として、さらにlibstdc++-6.dllをどこかから持ってきて
パスが通った場所に置けば動くと思います。
根本解決にはなっていませんが、今日調べられたのはここまででした。
参考:「指定されたプロシージャが見つかりません。」の調べ方(Dependency Walker編)
http://myokoym.github.io/entries/20131204/a0.html