質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

1回答

1403閲覧

Mecab0.996をcygwinでmakeするとエラーになる

groggy_egg

総合スコア24

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

0グッド

0クリップ

投稿2020/04/05 12:26

目的
Linux用MecabをWindows(cygwin)でインストールすること
参考サイト(公式) + 参考

実行した手順

  • mecab-0.996.tar.gzファイルをダウンロード
  • tar zxfv mecab-0.996.tar.gz で解凍
  • ./configure 実行(cd で上記ディレクトリに移動済み)
  • make 実行 → エラー
  • 不足しているパッケージをcygwinに追加し再度実行→エラー

エラーコード

$ make

make all-recursive
make[1]: ディレクトリ '/cygdrive/c/Users//Downloads/mecab-0.996' に入ります
Making all in src
make[2]: ディレクトリ '/cygdrive/c/Users/
/Downloads/mecab-0.996/src' に入ります
/bin/sh ../libtool --tag=CXX --mode=link g++ -O3 -Wall -no-undefined -version-info 2:0:0 -o libmecab.la -rpath /usr/local/lib viterbi.lo tagger.lo utils.lo eval.lo iconv_utils.lo dictionary_rewriter.lo dictionary_generator.lo dictionary_compiler.lo context_id.lo connector.lo nbest_generator.lo writer.lo string_buffer.lo param.lo tokenizer.lo char_property.lo dictionary.lo feature_index.lo lbfgs.lo learner_tagger.lo learner.lo libmecab.lo -lpthread -lpthread -lstdc++
libtool: link: rm -fr .libs/libmecab.dll.a


/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: .libs/feature_index.o:feature_index.cpp:(.text+0x52da): undefined reference to void std::vector<std::pair<unsigned long, double>, std::allocator<std::pair<unsigned long, double> > >::emplace_back<std::pair<unsigned long, double> >(std::pair<unsigned long, double>&&)' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: .libs/feature_index.o:feature_index.cpp:(.text+0x766c): undefined reference to void std::vector<double, std::allocator<double> >::emplace_back<double>(double&&)'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:375: libmecab.la] エラー 1
make[2]: ディレクトリ '/cygdrive/c/Users//Downloads/mecab-0.996/src' から出ます
make[1]: *** [Makefile:409: all-recursive] エラー 1
make[1]: ディレクトリ '/cygdrive/c/Users/
/Downloads/mecab-0.996' から出ます
make: *** [Makefile:282: all] エラー 2

こちらなどを参考にmissingやnoになっているパッケージを追加して再度./configure→makeしてみたのですがうまくいきませんでした。

cygwinにまだパッケージが不足しているのか、コード自体にエラーがあるのかがよくわかりません。
アドバイスお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

3年以上前ぐらいにやった手順を確認しながら別の環境で構築が必要だったので試してみました。

まずビルドに必要なライブラリをcygwinにインストールします。
バッチファイルを作って次のような感じにすると手早いですかね。
コマンドラインオプションの詳しい情報はこちら

bat

1.\setup-x86_64.exe -d -q -g -P gcc-g++,binutils,libiconv,libiconv-devel,make,automake,patch

次のような本邦初公開のパッチをあてます。コピペしてmecab-0.996-cygwin-build.patchと保存して下さい。改行コードをLFのみにするのをお忘れなく。

diff

1diff -ur old/src/dictionary.cpp new/src/dictionary.cpp 2--- old/src/dictionary.cpp 2013-02-16 11:50:46.000000000 +0900 3+++ new/src/dictionary.cpp 2018-11-14 23:35:59.487114500 +0900 4@@ -5,6 +5,7 @@ 5 // Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation 6 #include <fstream> 7 #include <climits> 8+#include <vector> 9 #include "connector.h" 10 #include "context_id.h" 11 #include "char_property.h" 12diff -ur old/src/feature_index.cpp new/src/feature_index.cpp 13--- old/src/feature_index.cpp 2012-11-25 14:35:33.000000000 +0900 14+++ new/src/feature_index.cpp 2018-11-14 23:35:01.967917900 +0900 15@@ -7,6 +7,7 @@ 16 #include <cstring> 17 #include <fstream> 18 #include <string> 19+#include <vector> 20 #include "common.h" 21 #include "feature_index.h" 22 #include "param.h" 23diff -ur old/src/param.cpp new/src/param.cpp 24--- old/src/param.cpp 2012-09-30 01:44:27.000000000 +0900 25+++ new/src/param.cpp 2018-11-14 23:41:10.627705800 +0900 26@@ -5,6 +5,7 @@ 27 // Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation 28 #include <cstdio> 29 #include <fstream> 30+#include <vector> 31 #include "common.h" 32 #include "param.h" 33 #include "string_buffer.h" 34diff -ur old/src/tagger.cpp new/src/tagger.cpp 35--- old/src/tagger.cpp 2013-02-18 01:55:30.000000000 +0900 36+++ new/src/tagger.cpp 2018-11-14 23:37:13.846426300 +0900 37@@ -6,6 +6,7 @@ 38 #include <cstring> 39 #include <iostream> 40 #include <iterator> 41+#include <vector> 42 #include "common.h" 43 #include "connector.h" 44 #include "mecab.h" 45diff -ur old/src/tokenizer.cpp new/src/tokenizer.cpp 46--- old/src/tokenizer.cpp 2013-01-23 23:58:03.000000000 +0900 47+++ new/src/tokenizer.cpp 2018-11-14 23:36:41.628424200 +0900 48@@ -3,6 +3,7 @@ 49 // 50 // Copyright(C) 2001-2011 Taku Kudo <taku@chasen.org> 51 // Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation 52+#include <vector> 53 #include "common.h" 54 #include "connector.h" 55 #include "darts.h" 56diff -ur old/src/utils.cpp new/src/utils.cpp 57--- old/src/utils.cpp 2013-01-22 14:33:25.000000000 +0900 58+++ new/src/utils.cpp 2018-11-14 23:38:36.944425400 +0900 59@@ -6,6 +6,7 @@ 60 #include <cstring> 61 #include <fstream> 62 #include <iostream> 63+#include <vector> 64 65 #ifdef HAVE_CONFIG_H 66 #include "config.h" 67diff -ur old/src/viterbi.cpp new/src/viterbi.cpp 68--- old/src/viterbi.cpp 2013-02-18 01:00:26.000000000 +0900 69+++ new/src/viterbi.cpp 2018-11-14 23:39:17.019705400 +0900 70@@ -7,6 +7,7 @@ 71 #include <iterator> 72 #include <cmath> 73 #include <cstring> 74+#include <vector> 75 #include "common.h" 76 #include "connector.h" 77 #include "mecab.h" 78diff -ur old/src/winmain.h new/src/winmain.h 79--- old/src/winmain.h 2012-10-28 13:07:01.000000000 +0900 80+++ new/src/winmain.h 2018-11-14 23:42:25.688374200 +0900 81@@ -2,7 +2,7 @@ 82 // 83 // Copyright(C) 2001-2011 Taku Kudo <taku@chasen.org> 84 // Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation 85-#if defined(_WIN32) || defined(__CYGWIN__) 86+#if defined(_WIN32) && !defined(__CYGWIN__) 87 88 #include <windows.h> 89 #include <string>

図のようにmecab-0.996と同じフォルダに配置してwork_dirの位置からパッチをあてます。

配置図

bash

1patch -p1 -d mecab-0.996 < mecab-0.996-cygwin-build.patch

mecab-0.996のフォルダに入ってビルドします。ここでは$HOME/.localにインストールする例です。
通常だと/usr/localにインストールすることが多いと思います。
この例でうまくインストールするためには$HOME/.local/binPATHが通っていることが前提になります。
--enable-utf8-onlyをつけなくてもうまくいくと思います。defファイルの文字コードは次の辞書のインストールが関係します。

bash

1./configure --prefix=$HOME/.local --enable-utf8-only --with-charset=utf8 2make 3make install

次にmecab-ipadic-2.7.0-20070801をビルドするのですが,二通りあります。
defファイルがEUC-JPでも気にしないのであれば,

bash

1./configure --prefix=$HOME/.local --with-charset=utf-8 2make 3make install

でOKです。

もう一つは全てのデータをあらかじめutf-8に変換してしまう方法で,次のようなスクリプトを準備します。
from-eucjp-to-utf8.shとして,mecab-ipadic-2.7.0-20070801に置きます。

bash

1#!/bin/bash 2 3DICTDIR=./mecab-ipadic-2.7.0-20070801 4for csvfile in $DICTDIR/*.csv ;do 5 if [ ! -e ${csvfile}.bak ]; then 6 mv $csvfile $csvfile.bak 7 fi 8 iconv -f EUC-JP -t UTF-8 ${csvfile}.bak >${csvfile} 9done 10for deffile in $DICTDIR/*.def ;do 11 if [ ! -e ${deffile}.bak ]; then 12 mv $deffile $deffile.bak 13 fi 14 iconv -f EUC-JP -t UTF-8 ${deffile}.bak >${deffile} 15done 16 17DICRC=$DICTDIR/dicrc 18if [ ! -e $DICRC.bak ]; then 19 mv $DICRC $DICRC.bak 20fi 21sed -e 's/EUC-JP/UTF-8/' $DICRC.bak >$DICRC

bash

1/bin/bash from-eucjp-to-utf8.sh

で元のデータが全部UTF-8に変更されます。

ここで,mecab-ipadic...フォルダの中に入って

bash

1./configure --prefix=$HOME/.local 2make 3make install

でインストールできます。
ここではutf-8を指定しないのがミソでutf-8を指定すると,途中のiconvに失敗します。

以上のような感じでインストールできるのではないかと思います。

投稿2022/02/23 17:07

ujimushi_sradjp

総合スコア2066

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問