[mecab-users 166] Re: mecab-0.92のインストールについて

Back to archive index

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 / 村山文孝




mecab-users メーリングリストの案内
Back to archive index