Fumitaka Murayama
fumi****@offic*****
2006年 10月 10日 (火) 13:03:02 JST
はじめまして、村山と申します。 私も mecab-0.93 SunOS noname 5.9 Generic_118558-28 sun4u sparc SUNW,Sun-Fire-V210 Solaris にて同様の現象に遭遇しましたので、調べてみました。 この現象は http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA02.html#Q14 にて説明されている通りで、0.91 から 0.92 の変更の際、アライメントが崩れ バスエラーを起こすようになりました。 なお、手元で調べた限り #include <stdio.h> main() { char buf[8]; unsigned int *pui; int i; for (i = 0; i < 5; i += 2) { printf("point %d\n", i); pui = (unsigned int *)&buf[i]; *pui = 0xef718f77u; printf("0xef718f77u => %x\n", *pui); } } といったプログラムで確認すると SPARC 版 Solaris でのみバスエラーとなり、 SPARC でも FreeBSD、Solaris でも x86 版でバスエラーとはなりませんでした。 ヘッダ部分も struct にまとめてから格納すれば良いのですが、個々の変数にて 格納されているので、環境によってはこのようなエラーとなるのでしょう。 #struct に格納する際、アライメントされますので。 私は、とりあえず、 --- src/dictionary.cpp.org 2006-07-09 22:34:22.000000000 +0900 +++ src/dictionary.cpp 2006-10-08 17:43:15.208305000 +0900 @@ -52,6 +52,7 @@ read_static<unsigned short>(&ptr, type_); read_static<unsigned short>(&ptr, index_type); + read_static<unsigned short>(&ptr, index_type); read_static<unsigned int>(&ptr, lexsize_); read_static<unsigned int>(&ptr, lsize_); read_static<unsigned int>(&ptr, rsize_); @@ -272,6 +273,7 @@ bofs.write(reinterpret_cast<char*>(&version), sizeof(unsigned short)); bofs.write(reinterpret_cast<char*>(&type), sizeof(unsigned short)); bofs.write(reinterpret_cast<char*>(&dummy), sizeof(unsigned short)); + bofs.write(reinterpret_cast<char*>(&dummy), sizeof(unsigned short)); bofs.write(reinterpret_cast<char*>(&lexsize), sizeof(unsigned int)); bofs.write(reinterpret_cast<char*>(&lsize), sizeof(unsigned int)); bofs.write(reinterpret_cast<char*>(&rsize), sizeof(unsigned int)); として動作することを確認しました。 install-sh の件ですが、権限が 0644 となっているので、0755 として動作しま した。ただし、環境によっては、システムの install を使用し再現しない場合 もあると思います。 余談ですが、mmap のサイズで http://www.ncad.co.jp/~komata/c-kouza20.htm の「ページサイズで境界合わせを行なったサイズ」という説明が若干気になりま した。 On Wed Aug 9 21:57:56 2006 ANB12****@nifty***** (ANB12****@nifty*****) wrote: > mecab-0.92を、Solaris10にインストールしようとしましたら、 > 以下のエラーが発生しました。 > > インストールした手順は、 > > % gunzip -c mecab-0.92.tar.gz | tar xvf - > % cd mecab-0.92 > % ./configure > % make > % make check > > で、make checkしたところ、以下のエラーが発生しました。 > ----------------------------------------------------------------------------------- > %make check ..... > done! > バスエラー ..... > ----------------------------------------------------------------------------------- > バスエラーが多発していますが、これは何が原因でエラーが発せいしているのでしょうか? > > > このあと、このまま強引ですが、スーパーユーザーになり、make install しようとしましたが、またエラーが発生しました。 > ----------------------------------------------------------------------------------- > #make install ..... > ./libtool: line 5864: .././install-sh: Permission denied ..... > ----------------------------------------------------------------------------------- > エラーメッセージから、install-sh の権限を変更すればいいみたいですが、合っていますでしょうか? Fumitaka Murayama / 村山文孝