Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install failure on make test #4

Open
tmaru-jumpoff opened this issue May 28, 2012 · 14 comments
Open

Install failure on make test #4

tmaru-jumpoff opened this issue May 28, 2012 · 14 comments

Comments

@tmaru-jumpoff
Copy link

日本語にて失礼いたします。

以下の環境にてText::MeCabをCPANからインストールしようとしていますが途中でエラーとなり、インストールできない状況です。

以下に環境、インストール実行時の状況を示します。

なおgithubの利用は初めてなのでお作法など、誤りもあろうかと思います。恐縮ですがご指南頂ければ幸いです。

[環境]
CentOS release 5.5 (Final)
2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

glib2-2.12.3-4.el5_3.1
glibc-2.5-81.el5_8.2
glibc-common-2.5-81.el5_8.2
glibc-devel-2.5-81.el5_8.2

libgcc-4.1.2-52.el5_8.1
gcc-4.1.2-52.el5_8.1
gcc-c++-4.1.2-52.el5_8.1
compat-libgcc-296-2.96-138
libgcc-4.1.2-52.el5_8.1

perl-5.8.8-27.el5

MeCab-0.993

[現象]

cpan -i Text::MeCab

を実行すると以下のメッセージにて進行するがtestにてfailureとなってしまう。


cpan -i Text::MeCab

(中略)

Path to mecab config? [/usr/local/bin/mecab-config]
detected mecab version 0.993
Using compiler flags '-I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993'...
Using linker flags '-L/usr/local/lib -lmecab -lstdc++'...

Text::MeCab needs to know what encoding you built your dictionary with
to properly execute tests.

Encoding of your mecab dictionary? (shift_jis, euc-jp, utf-8) [euc-jp] utf-8
Using utf-8 as your dictionary encoding
Detected the following mecab information:
version: 0.993
cflags: -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src
libs: -L/usr/local/lib -lmecab -lstdc++
include: /usr/local/include
reading /usr/local/include/mecab.h to find all constants
Writing ppport.h
Checking if your kit is complete...
Looks good
Writing Makefile for Text::MeCab
Writing MYMETA.yml and MYMETA.json
cp lib/Text/MeCab/Dict.pm blib/lib/Text/MeCab/Dict.pm
cp lib/Text/MeCab/Node.pod blib/lib/Text/MeCab/Node.pod
cp lib/Text/MeCab.pm blib/lib/Text/MeCab.pm
gcc -c "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION="0.20013" -DXS_VERSION="0.20013" -o xs/text-mecab-node.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab-node.c
xs/text-mecab-node.c:7 から include されたファイル中:
xs/text-mecab.h:120:30: 警告: ファイル末尾に改行がありません
/usr/bin/perl "-Iinc" /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap xs/MeCab.xs > xs/MeCab.xsc && mv xs/MeCab.xsc xs/MeCab.c
gcc -c "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION="0.20013" -DXS_VERSION="0.20013" -o xs/MeCab.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/MeCab.c
xs/MeCab.xs:1 から include されたファイル中:
xs/text-mecab.h:120:30: 警告: ファイル末尾に改行がありません
xs/MeCab.xs:64: 警告: 構造体初期化子内の要素が多すぎます
xs/MeCab.xs:64: 警告: (near initialization for ‘TextMeCab_vtbl’)
xs/MeCab.c: In function ‘XS_Text__MeCab__Node__Cloned_format’:
xs/MeCab.c:1066: 警告: ‘mecab’ may be used uninitialized in this function
xs/MeCab.c: In function ‘XS_Text__MeCab__Node_format’:
xs/MeCab.c:676: 警告: ‘mecab’ may be used uninitialized in this function
xs/MeCab.c: In function ‘XS_Text__MeCab_parse’:
xs/MeCab.c:303: 警告: ‘mecab’ may be used uninitialized in this function
gcc -c "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION="0.20013" -DXS_VERSION="0.20013" -o xs/text-mecab.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab.c
xs/text-mecab.c:7 から include されたファイル中:
xs/text-mecab.h:120:30: 警告: ファイル末尾に改行がありません
xs/text-mecab.c: In function ‘TextMeCab_create’:
xs/text-mecab.c:48: 警告: データ型の範囲制限によって、比較が常に false となります
xs/text-mecab.c: In function ‘TextMeCab_create_from_av’:
xs/text-mecab.c:71: 警告: データ型の範囲制限によって、比較が常に false となります
xs/text-mecab.c:114:30: 警告: ファイル末尾に改行がありません
xs/text-mecab.c:61: 警告: ‘argv’ may be used uninitialized in this function
gcc -c "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION="0.20013" -DXS_VERSION="0.20013" -o xs/text-mecab-clone.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab-clone.c
xs/text-mecab-clone.c:7 から include されたファイル中:
xs/text-mecab.h:120:30: 警告: ファイル末尾に改行がありません
Running Mkbootstrap for Text::MeCab ()
chmod 644 MeCab.bs
rm -f blib/arch/auto/Text/MeCab/MeCab.so
LD_RUN_PATH="/usr/local/lib:/usr/lib64" gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic xs/text-mecab-node.o xs/MeCab.o xs/text-mecab.o xs/text-mecab-clone.o -o blib/arch/auto/Text/MeCab/MeCab.so
-L/usr/local/lib -lmecab -lstdc++ \

chmod 755 blib/arch/auto/Text/MeCab/MeCab.so
cp MeCab.bs blib/arch/auto/Text/MeCab/MeCab.bs
chmod 644 blib/arch/auto/Text/MeCab/MeCab.bs
Manifying blib/man3/Text::MeCab::Dict.3pm
lib/Text/MeCab/Dict.pm:161: Unknown command paragraph "=encoding UTF-8"
Manifying blib/man3/Text::MeCab::Node.3pm
Manifying blib/man3/Text::MeCab.3pm
/usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/.t t//*.t
t/01-sanity.t ................ 1/42 Bareword "MECAB_NOR_NODE" not allowed while "strict subs" in use at t/01-sanity.t line 11.
Bareword "MECAB_UNK_NODE" not allowed while "strict subs" in use at t/01-sanity.t line 12.
Bareword "MECAB_BOS_NODE" not allowed while "strict subs" in use at t/01-sanity.t line 13.
Bareword "MECAB_EOS_NODE" not allowed while "strict subs" in use at t/01-sanity.t line 14.
Execution of t/01-sanity.t aborted due to compilation errors.

Looks like you planned 42 tests but ran 1.

Looks like your test exited with 9 just after 1.

t/01-sanity.t ................ Dubious, test returned 9 (wstat 2304, 0x900)
Failed 41/42 subtests
t/node/01_load.t ............. ok
t/node/02_api.t .............. ok
t/node/03_clone.t ............ ok
t/node/04_clone_free.t ....... ok
t/node/05_format.t ........... ok
t/regression/01_tomi_args.t .. skipped: SWIG MeCab not available
t/tagger/01_load.t ........... ok
t/tagger/02_api.t ............ ok
t/tagger/03_basic.t .......... ok

Test Summary Report

t/01-sanity.t (Wstat: 2304 Tests: 1 Failed: 0)
Non-zero exit status: 9
Parse errors: Bad plan. You planned 42 tests but ran 1.
Files=10, Tests=2336, 2 wallclock secs ( 0.20 usr 0.01 sys + 0.42 cusr 0.05 csys = 0.68 CPU)
Result: FAIL
Failed 1/10 test programs. 0/2336 subtests failed.
make: *** [test_dynamic] エラー 255
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force

@lestrrat
Copy link
Collaborator

定数(MECAB_***)に関しては a9ac81c までで消えると思うので gitから落としてきてもらって試していただくといいかと思います。

が、自分の環境ではその部分が直っても他の部分で mecab 0.993に対して mecab_new() が NULLを返すという自体になっており、そこで止まってる感じです。

@tmaru-jumpoff
Copy link
Author

早速のcommentありがとうございます。

定数について他の方がMakefile.PLにて追記する事により上記のような現象が解消される旨書かれている記事を拝見しておりました。ただバージョンも違うので同じ手法は使えないと思っておりました。

が、自分の環境ではその部分が直っても他の部分で mecab 0.993に対して mecab_new() が NULLを返すという自体になっており、そこで止まってる感じです。

アドバイス頂いた内容を実装しても動作しない可能性もあると言う事でしょうか。

取り急ぎアドバイス頂いた部分について試してみようと思います。

@tmaru-jumpoff
Copy link
Author

試してみました。

/usr/local/src にgitから落としてきたlestrrat-Text-MeCab-a9ac81cを展開し、Makefile.PLを確認して必要と思われるモジュールをインストールしてperl ./Makefile.PLを実行してみました。

MeCabを展開している場所がここでしたので同様に展開しています。

[root@ajp-mailgw lestrrat-Text-MeCab-a9ac81c]# perl ./Makefile.PL
include /usr/local/src/lestrrat-Text-MeCab-a9ac81c/inc/Module/Install.pm
Array found where operator expected at ./Makefile.PL line 23, at end of line
(Do you need to predeclare cc_define?)
syntax error at ./Makefile.PL line 23, near "cc_define @"
Execution of ./Makefile.PL aborted due to compilation errors.

Perlを使った事がないので難儀しております。
基本的な事だと思いますが恐縮ですがアドバイス頂けましたら幸いです。

@lestrrat
Copy link
Collaborator

"MeCabを展開した場所"とありますが、MeCabはmake + make installまで済ませてありますか?
make installまでされていれば通常は mecab-configという実行可能ファイルがインストールされているはずです。Text::MeCabから見える必要があるのはこのファイルだけです(このファイルを実行する事によってText::MeCabをコンパイルするのに必要な情報を全て得る事ができます)。なので「MeCabを展開した場所」にText::MeCabを展開する必要はありません。

通常は以下のように聞かれます:

> perl Makefile.PL 
include /Users/daisuke/git/Text-MeCab/inc/Module/Install.pm
include inc/Module/Install/Makefile.pm
include inc/Module/Install/Base.pm
Path to mecab config? [/usr/local/bin/mecab-config]

上記のように発見可能な場所にmecab-configがあれば自動的に見つけますし、なければ上記の最後の行が

Path to mecab config? []

となりますので、正しいパスを指定して入れれば動くはずです。

次に"Do you need to predeclare..."系のエラーですが、これらは通常CPANから持ってきたバージョンであればtar.gzファイルに同梱されているのですが、gitではそれがされていないために起こっています。先ほどMakefile.PLで足りないファイルを表示するように変更しておきましたので、それを見てcpan/cpanm等で前もってインストールしてください。

@tmaru-jumpoff
Copy link
Author

ありがとうございます。

MeCabはmake、make install まで終えている状態で、実際に動作もしています。
MeCabを展開した場所、と言うのは /usr/local/src でMeCabのソースを展開していたので同様にこのパスで
展開していました。(誤解があるようでしたら、すみませんでした)
Text::MeCabのインストールに際してはMeCabのインストールが前提、と言う認識でおりました。

which mecabすると、

[root@ajp-mailgw ~]# which mecab
/usr/local/bin/mecab

と返してくれます。

mecab-configもmecabと同じパスにある事から同様にwhichすると、

[root@ajp-mailgw ~]# which mecab-config
/usr/local/bin/mecab-config

と返してくれます。

次に"Do you need to predeclare..."系のエラーですが、これらは通常CPANから持ってきたバージョンであればtar.gzファイルに同梱されているのですが、gitではそれがされていないために起こっています。先ほどMakefile.PLで足りないファイルを表示するように変更しておきましたので、それを見てcpan/cpanm等で前もってインストールしてください。

ありがとうございます。

改めてダウンロードして、perl ./Makefile.PL してみました。
するといくつか足りないモジュールがあったのでcpan -i してみました。
その中で下記モジュールだけが何故か入りませんでした。

[root@ajp-mailgw lestrrat-Text-MeCab-6eada97]# perl ./Makefile.PL
include /usr/local/src/lestrrat-Text-MeCab-6eada97/inc/Module/Install.pm
You don't seem to have some modules required for building this module.
Please install the following modules first:

  • Module::Install::XSUtil

Bail out
[root@ajp-mailgw lestrrat-Text-MeCab-6eada97]#

さらに、

[root@ajp-mailgw lestrrat-Text-MeCab-6eada97]# cpan -i Module::Install::XSUtil
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Wed, 30 May 2012 00:27:02 GMT
Running install for module Module::Install::XSUtil
Running make for G/GF/GFUJI/Module-Install-XSUtil-0.42.tar.gz

(中略)

Removing previously used /root/.cpan/build/Module-Install-XSUtil-0.42

CPAN.pm: Going to build G/GF/GFUJI/Module-Install-XSUtil-0.42.tar.gz

Checking if your kit is complete...
Looks good
Warning: prerequisite B::Hooks::OP::Annotation 0.43 not found.
Writing Makefile for Module::Install::XSUtil
Writing MYMETA.yml and MYMETA.json
---- Unsatisfied dependencies detected during [G/GF/GFUJI/Module-Install-XSUtil-0.42.tar.gz] -----
B::Hooks::OP::Annotation
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes]
Running make test
Delayed until after prerequisites
Running make install
Delayed until after prerequisites
Running install for module B::Hooks::OP::Annotation
Running make for C/CH/CHOCOLATE/B-Hooks-OP-Annotation-0.44.tar.gz

(中略)

Removing previously used /root/.cpan/build/B-Hooks-OP-Annotation-0.44

CPAN.pm: Going to build C/CH/CHOCOLATE/B-Hooks-OP-Annotation-0.44.tar.gz

Can't locate ExtUtils/Depends.pm in @inc (@inc contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at Makefile.PL line 7.
BEGIN failed--compilation aborted at Makefile.PL line 7.
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install
Running make for G/GF/GFUJI/Module-Install-XSUtil-0.42.tar.gz
Is already unwrapped into directory /root/.cpan/build/Module-Install-XSUtil-0.42

CPAN.pm: Going to build G/GF/GFUJI/Module-Install-XSUtil-0.42.tar.gz

cp lib/Module/Install/XSUtil.pm blib/lib/Module/Install/XSUtil.pm
Manifying blib/man3/Module::Install::XSUtil.3pm
/usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/.t
t/00_load.t ..... 1/1 # Testing Module::Install::XSUtil/0.42
t/00_load.t ..... ok
t/01_example.t .. 0 ← ここでとまります。数字を入れると再開するようです。(ここでは0を入力しました)
t/01_example.t .. 1/? src/Foo.xs:7:40: error: Install/hook_op_annotation.h: そのようなファイルやディレクトリはありません
src/Foo.xs:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘MYMODULE_ANNOTATIONS’
src/Foo.xs: In function ‘XS_Foo_END’:
src/Foo.xs:30: 警告: implicit declaration of function ‘op_annotation_group_free’
src/Foo.xs:30: error: ‘MYMODULE_ANNOTATIONS’ undeclared (first use in this function)
src/Foo.xs:30: error: (Each undeclared identifier is reported only once
src/Foo.xs:30: error: for each function it appears in.)
src/Foo.xs: In function ‘boot_Foo’:
src/Foo.xs:25: error: ‘MYMODULE_ANNOTATIONS’ undeclared (first use in this function)
src/Foo.xs:25: 警告: implicit declaration of function ‘op_annotation_group_new’
make[1]: *
* [src/Foo.o] エラー 1
t/01_example.t .. 3/?

Failed test '... success'

at t/01_example.t line 29.

got: '512'

expected: '0'

make[1]: ディレクトリ `/root/.cpan/build/Module-Install-XSUtil-0.42/example' に入ります

cp include/foo/bar.h blib/arch/auto/Foo/foo/bar.h

cp include/foo/baz.h blib/arch/auto/Foo/foo/baz.h

cp lib/Foo.pm blib/lib/Foo.pm

cp include/foo.h blib/arch/auto/Foo/foo.h

/usr/bin/perl "-Iinc" /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap src/Foo.xs > src/Foo.xsc && mv src/Foo.xsc src/Foo.c

gcc -c "-I." "-Iinclude" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -g -ggdb -g3 -DVERSION="1.23" -DXS_VERSION="1.23" -o src/Foo.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DXS_ASSERT -DUSE_PPPORT -DFOO_OK src/Foo.c

make[1]: ディレクトリ `/root/.cpan/build/Module-Install-XSUtil-0.42/example' から出ます

src/Foo.xs:7:40: error: Install/hook_op_annotation.h: そのようなファイルやディレクトリはありません
src/Foo.xs:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘MYMODULE_ANNOTATIONS’
src/Foo.xs: In function ‘XS_Foo_END’:
src/Foo.xs:30: 警告: implicit declaration of function ‘op_annotation_group_free’
src/Foo.xs:30: error: ‘MYMODULE_ANNOTATIONS’ undeclared (first use in this function)
src/Foo.xs:30: error: (Each undeclared identifier is reported only once
src/Foo.xs:30: error: for each function it appears in.)
src/Foo.xs: In function ‘boot_Foo’:
src/Foo.xs:25: error: ‘MYMODULE_ANNOTATIONS’ undeclared (first use in this function)
src/Foo.xs:25: 警告: implicit declaration of function ‘op_annotation_group_new’
make[1]: *** [src/Foo.o] エラー 1
t/01_example.t .. 5/?

Failed test '... success'

at t/01_example.t line 32.

got: '512'

expected: '0'

make[1]: ディレクトリ `/root/.cpan/build/Module-Install-XSUtil-0.42/example' に入ります

gcc -c "-I." "-Iinclude" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -g -ggdb -g3 -DVERSION="1.23" -DXS_VERSION="1.23" -o src/Foo.o -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -DXS_ASSERT -DUSE_PPPORT -DFOO_OK src/Foo.c

make[1]: ディレクトリ `/root/.cpan/build/Module-Install-XSUtil-0.42/example' から出ます

Looks like you failed 2 tests of 18.

t/01_example.t .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/18 subtests

Test Summary Report

t/01_example.t (Wstat: 512 Tests: 18 Failed: 2)
Failed tests: 4, 6
Non-zero exit status: 2
Files=2, Tests=19, 5 wallclock secs ( 0.02 usr 0.01 sys + 1.24 cusr 0.30 csys = 1.57 CPU)
Result: FAIL
Failed 1/2 test programs. 2/19 subtests failed.
make: *** [test_dynamic] エラー 2
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force

インラインでも書きましたが、途中make testで下記の箇所でとまっていました。何か数値の入力が必要なようです。

Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t
t/00_load.t ..... 1/1 # Testing Module::Install::XSUtil/0.42
t/00_load.t ..... ok
t/01_example.t .. 0
t/01_example.t .. 1/? src/Foo.xs:7:40: error: Install/hook_op_annotation.h: そのようなファイルやディレクトリはありません

その後エラーでインストールが出来ませんでした。

必要なモジュールがあまりに足りていないのでしょうか。

だんだん本筋と違う方向に向かっているようで申し訳なく感じております。
すみません、アドバイス頂ければ幸いです。

@lestrrat
Copy link
Collaborator

Perlが古すぎませんか?確証はないですけど、5.8.8とか僕は正直最近使ってないのでわからないですね・・・
ちなみに数日前に出たのは5.16.0、その前のヤツは5.14.2です。

@tmaru-jumpoff
Copy link
Author

ご指摘ありがとうございます。

現在構築しているサーバーはパブリッククラウド上でCentOS5.5しか許されていません。
ちなみに現状のPerlに対してyum update perlしてみた所、
perl.x86_64 4:5.8.8-38.el5
までアップグレードできたのですが、dependencyチェックしてくれず、perl本体だけアップグレードされました。
その為か、この状態でcpan -i Module::Install::XSUtilしたところ、以下のようなエラーでインストールスクリプトそのものが
途中で止まってしまいました。

[root@ajp-mailgw ~]# cpan -i Module::Install::XSUtil
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Wed, 30 May 2012 00:27:02 GMT
Going to read /root/.cpan/sources/authors/01mailrc.txt.gz
CPAN: Compress::Zlib loaded ok
Undefined subroutine &IO::Uncompress::Base::readonly called at /usr/lib/perl5/site_perl/5.8.8/IO/Uncompress/Base.pm line 1076.

本来なら全て最新にしたい所なのですが、借りている環境の為難儀しています。

やるとすれば現在のPerlパッケージを全てeraseしてソースからビルドし直した方がいいのでしょうか。

@lestrrat
Copy link
Collaborator

lestrrat commented Jun 2, 2012

やるとすれば現在のPerlパッケージを全てeraseしてソースからビルドし直した方がいいのでしょうか。

yumで管理されているPerlを普段から使っていませんので分かりかねます。ただいわゆるシステムPerlは他のツールが使っている可能性が高いのでそれを変更・削除すると色々問題が出るんじゃないかと想像します。

rubyでもpythonでもそうですが、まぁ好き勝手なモジュールを入れたいのなら自分のユーザースペース上で使えるコピーをインストールしておくのが良いでしょう。perlの場合はperlbrewというものがありますので検索してみてください。

@tmaru-jumpoff
Copy link
Author

少し時間が空きましてすみません。

残念ですが現構築環境でのText::MeCabインストールは少し難しいと考え、他の方法を模索し始めました。

別の環境を用意して、gitさせて頂いたソースで試しにText::MeCabがインストールできるかどうか試してみました。

CentOS 6.2
Linux testmgw 2.6.32-131.0.15.el6.x86_64 #1 SMP Sat Nov 12 15:11:58 CST 2011 x86_64 x86_64 x86_64 GNU/Linux

MeCab-0.993

Perlについては以下の通りです。
[root@testmgw lestrrat-Text-MeCab-6eada97]# perl -V
Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

Platform:
osname=linux, osvers=2.6.32-44.2.el6.x86_64, archname=x86_64-linux-thread-multi
uname='linux c6b5.bsys.dev.centos.org 2.6.32-44.2.el6.x86_64 #1 smp wed jul 21 12:48:32 edt 2010 x86_64 x86_64 x86_64 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DDEBUGGING=-g -Dversion=5.10.1 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5 -Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5 -Darchlib=/usr/lib64/perl5 -Dvendorlib=/usr/share/perl5/vendor_perl -Dvendorarch=/usr/lib64/perl5/vendor_perl -Dinc_version_list=5.10.0 -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic',
cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.4.5 20110214 (Red Hat 4.4.5-6)', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -fstack-protector'
libpth=/usr/local/lib64 /lib64 /usr/lib64
libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.12'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib64/perl5/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_ALL
USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
USE_PERLIO USE_REENTRANT_API
Built under linux
Compiled at Nov 6 2011 00:38:44
@inc:
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.

MeCabもきちんと動作することを確認しています。

この状況でcpan -i Text::MeCabしてみましたが異なるエラーで止まってしまいます。

[root@testmgw lib]# cpan -i Text::MeCab
CPAN: Storable loaded ok (v2.20)
Reading '/root/.cpan/Metadata'
Database was generated on Mon, 04 Jun 2012 07:19:03 GMT
Running install for module 'Text::MeCab'
Running make for D/DM/DMAKI/Text-MeCab-0.20013.tar.gz
CPAN: Digest::SHA loaded ok (v5.47)
CPAN: Compress::Zlib loaded ok (v2.052)
Checksum for /root/.cpan/sources/authors/id/D/DM/DMAKI/Text-MeCab-0.20013.tar.gz ok
CPAN: Archive::Tar loaded ok (v1.88)
Text-MeCab-0.20013/
Text-MeCab-0.20013/Changes
Text-MeCab-0.20013/custom.csv
Text-MeCab-0.20013/eg/
Text-MeCab-0.20013/inc/
Text-MeCab-0.20013/lib/
Text-MeCab-0.20013/Makefile.PL
Text-MeCab-0.20013/MANIFEST
Text-MeCab-0.20013/MeCab.src
Text-MeCab-0.20013/META.yml
Text-MeCab-0.20013/ppport.h
Text-MeCab-0.20013/t/
Text-MeCab-0.20013/tools/
Text-MeCab-0.20013/xs/
Text-MeCab-0.20013/xt/
Text-MeCab-0.20013/xt/01_pod.t
Text-MeCab-0.20013/xt/02_pod-coverage.t
Text-MeCab-0.20013/xt/03_threads.t
Text-MeCab-0.20013/xt/04_leak.t
Text-MeCab-0.20013/xt/05_saba.t
Text-MeCab-0.20013/xs/MeCab.xs
Text-MeCab-0.20013/xs/text-mecab-clone.c
Text-MeCab-0.20013/xs/text-mecab-node.c
Text-MeCab-0.20013/xs/text-mecab.c
Text-MeCab-0.20013/xs/text-mecab.h
Text-MeCab-0.20013/xs/typemap
Text-MeCab-0.20013/tools/benchmark.pl
Text-MeCab-0.20013/tools/probe_mecab.pl
Text-MeCab-0.20013/t/01-sanity.t
Text-MeCab-0.20013/t/node/
Text-MeCab-0.20013/t/regression/
Text-MeCab-0.20013/t/strings.dat
Text-MeCab-0.20013/t/tagger/
Text-MeCab-0.20013/t/tagger/01_load.t
Text-MeCab-0.20013/t/tagger/02_api.t
Text-MeCab-0.20013/t/tagger/03_basic.t
Text-MeCab-0.20013/t/regression/01_tomi_args.t
Text-MeCab-0.20013/t/node/01_load.t
Text-MeCab-0.20013/t/node/02_api.t
Text-MeCab-0.20013/t/node/03_clone.t
Text-MeCab-0.20013/t/node/04_clone_free.t
Text-MeCab-0.20013/t/node/05_format.t
Text-MeCab-0.20013/lib/Text/
Text-MeCab-0.20013/lib/Text/MeCab/
Text-MeCab-0.20013/lib/Text/MeCab.pm
Text-MeCab-0.20013/lib/Text/MeCab/Dict.pm
Text-MeCab-0.20013/lib/Text/MeCab/Node.pod
Text-MeCab-0.20013/inc/Devel/
Text-MeCab-0.20013/inc/Module/
Text-MeCab-0.20013/inc/Module/Install/
Text-MeCab-0.20013/inc/Module/Install.pm
Text-MeCab-0.20013/inc/Module/Install/AuthorTests.pm
Text-MeCab-0.20013/inc/Module/Install/Base.pm
Text-MeCab-0.20013/inc/Module/Install/Can.pm
Text-MeCab-0.20013/inc/Module/Install/CheckLib.pm
Text-MeCab-0.20013/inc/Module/Install/Fetch.pm
Text-MeCab-0.20013/inc/Module/Install/Makefile.pm
Text-MeCab-0.20013/inc/Module/Install/Metadata.pm
Text-MeCab-0.20013/inc/Module/Install/Repository.pm
Text-MeCab-0.20013/inc/Module/Install/Win32.pm
Text-MeCab-0.20013/inc/Module/Install/WriteAll.pm
Text-MeCab-0.20013/inc/Module/Install/XSUtil.pm
Text-MeCab-0.20013/inc/Devel/CheckLib.pm
Text-MeCab-0.20013/eg/add_custom.pl
CPAN: File::Temp loaded ok (v0.22)
CPAN: Parse::CPAN::Meta loaded ok (v1.4404)
CPAN: CPAN::Meta loaded ok (v2.120921)
CPAN: Module::CoreList loaded ok (v2.18)

CPAN.pm: Building D/DM/DMAKI/Text-MeCab-0.20013.tar.gz

Path to mecab config? [/usr/local/bin/mecab-config]
detected mecab version 0.993
Using compiler flags '-I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993'...
Using linker flags '-L/usr/local/lib -lmecab -lstdc++'...

Text::MeCab needs to know what encoding you built your dictionary with
to properly execute tests.

Encoding of your mecab dictionary? (shift_jis, euc-jp, utf-8) [euc-jp] utf-8
Using utf-8 as your dictionary encoding
Detected the following mecab information:
version: 0.993
cflags: -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=993 -I src
libs: -L/usr/local/lib -lmecab -lstdc++
include: /usr/local/include
/root/.cpan/build/Text-MeCab-0.20013-Ad5Z0x/assertlibxNrfqWzz: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
/root/.cpan/build/Text-MeCab-0.20013-Ad5Z0x/assertlibR0ggNXWS: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
wrong result: 'mecab', 'mecab'
No 'Makefile' createdCPAN: YAML loaded ok (v0.70)
DMAKI/Text-MeCab-0.20013.tar.gz
/usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Could not read metadata file. Falling back to other methods to determine prerequisites

メッセージからはshared libraryが見えていないように見受けられました。
しかしながら以下のようにlibmecab.so.2は存在しているのですが。。。
[root@testmgw lib]# ls -l /usr/local/lib
-rw-r--r--. 1 root root 2329090 6月 4 18:26 2012 libmecab.a
-rwxr-xr-x. 1 root root 952 6月 4 18:26 2012 libmecab.la
lrwxrwxrwx. 1 root root 17 6月 4 18:26 2012 libmecab.so -> libmecab.so.2.0.0
lrwxrwxrwx. 1 root root 17 6月 4 18:26 2012 libmecab.so.2 -> libmecab.so.2.0.0
-rwxr-xr-x. 1 root root 1419731 6月 4 18:26 2012 libmecab.so.2.0.0
drwxr-xr-x. 3 root root 4096 6月 4 17:41 2012 mecab

このケースではどのような問題が考えられるでしょうか。
毎度お手数をおかけしてすみません。

@lestrrat
Copy link
Collaborator

lestrrat commented Jun 4, 2012

このケースではどのような問題が考えられるでしょうか。

ldconfigくらいですかねぇ。正直使われているシステムの設定に関してはお手上げです。あと、いくらText::MeCabをgithubから落としても cpan -i Text::MeCabしたらCPANに上がっているバージョンが入るだけですよ。なのでコンパイルが始まったところでこのイッシューをあげる前と同じように落ちるだけです。

@tmaru-jumpoff
Copy link
Author

コメントありがとうございます。

手順混同していてご迷惑をおかけしてすみませんでした。

手順は2点試しました。

一つは前述のようにCPANにてインストールしたケースで、もう一つはgitから落としてきたソースからPerl ./Makefile.PLしたケースです。

gitのソースからのMakeについてはModule::Install::XSUtilのインストールで同様なエラーが出て最終的にインストールできず、
先に進めない状況でした。

メッセージを比較した感じではCPANの方が後一歩で行けるのかな、と言った感じを受けました。
CPANの方ではメッセージから必要なモジュールが読まれていて、最後にlibmecab.so.2が何処にあるのか分からない、と言った印象を受けました。

@lestrrat
Copy link
Collaborator

lestrrat commented Jun 5, 2012

1. 最初の問題

最新版libmecabにText::MeCabが対応できていない

2. 私の修正

Text::MeCabがlibmecab-0.933でもとりあえずコンパイルできるところまでは github版 にあげた

3. あなたのしていること

cpan -i Text::MeCab で CPANに上がっているバージョンの Text::MeCabを入れている。
すなわち、当然github版に入っている修正は当然入っていないです。万が一コンパイルできたとしても最初の問題に逆戻りです。
github版を試していただくというのが最初の意図ですので、そうしてください(#4 (comment))

XSUtilのインストールがエラーになるからcpan版を使うというのもおかしな話で、CPAN版でもXSUtilは使っているわけで、もしそれがそもそもインストールできていないならCPAN版もおかしなことになるのは当然の話です。

違う方法を試せば魔法のように問題が解決するわけはないので、一個一個可能性をつぶしていくしかないのではないでしょうか。

4. その他

  • perlの最新版は5.10.1ではなく5.16.0です。古くても動く可能性はありますが、Text::MeCabが依存しているモジュール類が対応していないこともありますし、現時点ではそういうモジュールがあるとは私は把握しておりませんが、私は普段5.14.2を使っているので古いPerlに関してすべてチェックしてはおりません。
  • システムPerlを使うのはあまりおすすめしません。perlbrewを使うべきと前の返信でもお伝えしました。
  • 環境をすべて整えても.soが見つからないのであれば、ldconfigというキーワードもお伝えしましたのでそちらをご確認ください

@tmaru-jumpoff
Copy link
Author

細かくコメント頂きありがとうございます。

説明不足により誤解を招き、申し訳ございません。

  • 現環境から新しい環境にて確認を始めた意図
    以前のコメントでもお伝えしておりますが現環境ではperl環境を最新にする事が出来ない制約があります。
    加えて、現在行っている作業にあまり時間がかけられなくなった事もあって現環境でのアプローチを変更しようと検討を始めている状況です。
    現環境でのアプローチを変える事とは別に、将来的に自由に環境をいじれる環境に移行した時に反映できるよう別の環境(CentOS6.2)での確認を同時並行で始めた事がこちらの経緯です。
  • CPANでの結果報告の件
    この点については申し訳ありません。きちんと報告すべきでした。
    以下のコメント頂いた際に自分のコメントの過ちに気づきました。
    https://github.com/lestrrat/Text-MeCab/issues/4#issuecomment-6097049)
    ただ、2つの違うソースについて別の環境(CentOS6.2)上での構築でどのような違いがあるのか知りたい為に“2つの手順”と記していました。むやみに試したつもりはありませんでしたが結果としてそのように伝わり、申し訳ございませんでした。

残念ながら、私はプログラマのような開発者ではなく、今回関わっている案件の都合上、調べながら今回の問題に対応しています。
稚拙な質問や報告ばかりでご迷惑をおかけして申し訳ございません。それにもかかわらず丁寧なコメントありがとうございます。

頂いたコメントを元に確認作業を続けたいと思います。現環境でもヒントを探してみたいと思います。

@lestrrat
Copy link
Collaborator

lestrrat commented Jun 5, 2012

残念ながら、私はプログラマのような開発者ではなく、今回関わっている案件の都合上、調べながら今回の問題に対応しています。

同情はしますが、敢えて苦言を呈させていただくと、この次にこのような状況に陥った時にはまず最初にそれを言うといいでしょう。こちらの期待値が全く違います。こちらは「なんでわからないんだ!」と思いながらイライラしますし、そちらも「そんなこと言ったってわからないからしょうがない!」と思わずにはいられないでしょう。

なお今回の件はわかっている人なら15分〜30分、わからない人は多分永遠にわからないタイプの問題かと思います。可能なら今からでも誰か身近なエンジニアに助けてもらうほうがよいかと。

それはともあれ、とりあえずやれることを書いておきますが:

以前のコメントでもお伝えしておりますが現環境ではperl環境を最新にする事が出来ない制約があります。

現環境でのアプローチを変える事とは別に、将来的に自由に環境をいじれる環境に移行した時に反映できるよう別の環境(CentOS6.2)での確認を同時並行で始めた事がこちらの経緯です。

いや、そういうことではありません。よく読んでください

  • perlbrewは「ユーザー権限でどうにでもできる場所にperlをインストールするツール」です
  • perlbrewはシステムperl(/usr/bin/perl)とは別のところに新たに最新のPerl環境を作ることができます
  • perlbrewはrootでなくとも使えます
  • ということはすでに使っているPerlないし環境を変更することなく新たなPerlをインストールできます。お使いの環境に違うperlを入れれば perlのバージョン以外の条件を変えずにXSUtilのインストール問題を検証できます

・・・なので制約云々の話はあまり関係ありません。これでperl-5.14.2をインストールすれば 以下のような検証結果が得られるはずですよね?

  5.8.8 5.10.1 5.14.2 推察
結果 x x どれかのモジュールが後方互換を捨てた
x x x もっと根本的な原因がある

後方互換の問題なら今度はそこから切り込んでいけばいいだけです。XSUtilに関してはこれが怪しいと思っています。「XSUtilが入らない」環境はそれだけでかなり怪しいです。もちろんこれはあくまで仮説なのでまったく別な結果になるかもしれませんが、そもそもの問題がわからない場合は可能性をひとつずつつぶしくのは面倒でも最短の道です

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants