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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cygwin

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

Mecab

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

Q&A

1回答

673閲覧

mecab0.996をcygwin64にインストール

S_for_teratail

総合スコア6

Cygwin

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

Mecab

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

0グッド

0クリップ

投稿2018/02/22 09:30

前提・実現したいこと

cygwin64にmecab0.996をインストールしたいのですが、makeの段階で以下のエラーメッセージが発生しました。
libiconv,libtoolなど必要なものは入っていると思います。

発生している問題・エラーメッセージ

*** Warning: This system can not link to static lib archive /usr/local/lib/libiconv.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. libtool: link: rm -fr .libs/libmecab.dll.a libtool: link: g++ -shared -nostdlib /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/crtbeginS.o .libs/viterbi.o .libs/tagger.o .libs/utils.o .libs/eval.o .libs/iconv_utils.o .libs/dictionary_rewriter.o .libs/dictionary_generator.o .libs/dictionary_compiler.o .libs/context_id.o .libs/connector.o .libs/nbest_generator.o .libs/writer.o .libs/string_buffer.o .libs/param.o .libs/tokenizer.o .libs/char_property.o .libs/dictionary.o .libs/feature_index.o .libs/lbfgs.o .libs/learner_tagger.o .libs/learner.o .libs/libmecab.o -L/usr/local/lib -lpthread -lstdc++ -L/usr/lib/gcc/x86_64-pc-cygwin/6.4.0 -L/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../.. -lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/crtend.o -O3 -o .libs/cygmecab-2.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libmecab.dll.a .libs/viterbi.o:viterbi.cpp:(.text+0x166): undefined reference to `void std::vector<mecab_path_t*, std::allocator<mecab_path_t*> >::emplace_back<mecab_path_t*>(mecab_path_t*&&)' .libs/viterbi.o:viterbi.cpp:(.text+0x166): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `void std::vector<mecab_path_t*, std::allocator<mecab_path_t*> >::emplace_back<mecab_path_t*>(mecab_path_t*&&)' .libs/viterbi.o:viterbi.cpp:(.text+0x193c): undefined reference to `std::vector<std::pair<char*, char*>, std::allocator<std::pair<char*, char*> > >::reserve(unsigned long)' .libs/viterbi.o:viterbi.cpp:(.text+0x193c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `std::vector<std::pair<char*, char*>, std::allocator<std::pair<char*, char*> > >::reserve(unsigned long)' (中略) >::emplace_back<std::string>(std::string&&)' .libs/utils.o:utils.cpp:(.text+0xb34): undefined reference to `void std::vector<std::string, std::allocator<std::string> >::emplace_back<std::string>(std::string&&)' .libs/iconv_utils.o:iconv_utils.cpp:(.text+0x4c): undefined reference to `libiconv_close' .libs/iconv_utils.o:iconv_utils.cpp:(.text+0x140): undefined reference to `libiconv_open' .libs/iconv_utils.o:iconv_utils.cpp:(.text+0x518): undefined reference to `libiconv' .libs/iconv_utils.o:iconv_utils.cpp:(.text+0x543): undefined reference to `libiconv' .libs/iconv_utils.o:iconv_utils.cpp:(.text+0x14): undefined reference to `libiconv_close' .libs/param.o:param.cpp:(.text+0x263d): undefined reference to `void std::vector<std::string, std::allocator<std::string> >::emplace_back<std::string>(std::string&&)' .libs/tokenizer.o:tokenizer.cpp:(.text$_ZNK5MeCab9TokenizerI12mecab_node_t12mecab_path_tE10getBOSNodeEPNS_9AllocatorIS1_S2_EE[_ZNK5MeCab9TokenizerI12mecab_node_t12mecab_path_tE10getBOSNodeEPNS_9AllocatorIS1_S2_EE]+0xf2): undefined reference to `void std::vector<mecab_node_t*, std::allocator<mecab_node_t*> (中略) .libs/feature_index.o:feature_index.cpp:(.text+0x4ec7): undefined reference to `std::vector<unsigned long, std::allocator<unsigned long> >::_M_default_append(unsigned long)' .libs/feature_index.o:feature_index.cpp:(.text+0x61c7): 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>&&)' .libs/feature_index.o:feature_index.cpp:(.text+0x86c8): 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]: ディレクトリ '/usr/src/mecab-0.996/src' から出ます make[1]: *** [Makefile:409: all-recursive] エラー 1 make[1]: ディレクトリ '/usr/src/mecab-0.996' から出ます make: *** [Makefile:282: all] エラー 2

該当のソースコード

cd /usr/src tar zxvf mecab-0.996.tar.gz patch -p1 -d ./mecab-0.996/ < ./mecab-0.996.patch cd ./mecab-0.996 ./configure CPPFLAGS=-DNOMINMAX LIBS="-liconv" --with-charset=utf8 LDFLAGS='-L/usr/local/lib -liconv' make http://chiranoura.nobody.jp/articles/2015-07-24_01_how_to_install_mecab/ を参考に、途中パッチを当てています。

試したこと

configure時にオプションの変更、mecab0.98での代替(こちらもエラー)

補足情報(FW/ツールのバージョンなど)

Windows10 home 64bit

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

クリップした質問は、後からいつでも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:03

ujimushi_sradjp

総合スコア2091

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問