Windows10 x64 にMeCabをx64でコンパイルしてみる

環境は Win10 Pro x64 + Visual C++ 2015 Build Tools + Python3.5.3 x64

isual C++ 2015 Build Tools のインストールの際には Windows 10 SDK のインストールは必須です

 → Python: pip install pylintのエラー対処(Windows)

 → LINK : fatal error LNK1158: cannot run 'rc.exe'が発生した場合の対処

 

現在 Visual C++ 2015 Build Tools はDLできない?ようなので以下の手順で行うのが良いのかな?

Windows 10 Pro で node のための Build環境 を設定してみる

 

参考にしたのはこちら

MeCabを「Windows10;Python3.5(64bit)」に入れる

Windowsにmecab-pythonを導入

WindowsのPythonでMecabを実行する(+Cygwinでも実行する)


mecab-0.996.exe をDLしてインストール

mecab-0.996.tar.gz をDLして解凍(MeCabのインストール先のほうが作業が楽 かも)

MeCab\mecab-0.996\src に cd

Makefile.msvc.inの改変
    Makefile.msvc.inをコピー⇒Makefile.msvcに名前を変える
    5行目を
        LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE MACHINE:X64 ADVAPI32.LIB
    8-9行目を
        -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
        -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
    11行目を
        -DMECAB_DEFAULT_RC="\"c:\\dev\\mecab\\etc\\mecabrc\""  ← インストール先にあわせる

feature_index.cppの改変
    356行目
        case 't':  os_ << (unsigned int)path->rnode->char_type; break;

writer.cppの改変
    260行目
        case 'L': *os << (unsigned int)lattice->size(); break;

mecab.hの改変
#ifndef SIWG 
 ↓変更↓
#ifndef SWIG

common.hの改変
#include <sstream>
 ↓追記↓
#include <iterator>

VS2015用 x64 Native Tools コマンドプロンプト を起動して、以下を実行する
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>vcvarsall.bat x64

> C:\Dev\MeCab\mecab-0.996\src ディレクトリに移動
> make.bat

C:\Dev\MeCab\bin に以下をコピー
 libmecab.dll
 mecab.exe
 mecab-test-gen.exe
 mecab-cost-train.exe
 mecab-dict-gen.exe
 mecab-dict-index.exe
 mecab-system-eval.exe

C:\Dev\MeCab\sdk にlibmecab.libをコピーする(mecab-python3のインストールを行う場合)

> mecab -v
mecab of 0.996

以下mecab-python3のインストール

> cd C:\Dev\MeCab\mecab-python3-0.7
 mecab-python3-0.7.tar.gz をDLして解凍(MeCabのインストール先のほうが作業が楽 かも)
 setup.py の書き換え
#!/usr/bin/env python

from distutils.core import setup,Extension,os
import string

def cmd1(str):
    return os.popen(str).readlines()[0][:-1]

def cmd2(str):
    return string.split (cmd1(str))

setup(name = "mecab-python",
    version = "0.996",
    py_modules=["MeCab"],
    ext_modules = [
        Extension("_MeCab",
            ["MeCab_wrap.cxx",],
            include_dirs=[r"C:\Dev\MeCab\sdk"],
            library_dirs=[r"C:\Dev\MeCab\sdk"],
            libraries=["libmecab"])
            ])

 MeCab\sdk\mecab.h を書き換える
/**
 * Lattice class
 */
class MECAB_DLL_CLASS_EXTERN Lattice {
public:

  virtual void set_result(const char *str)        = 0; //780行目にこの1行を追加

  /**
   * Clear all internal lattice data.
   */
  virtual void clear()              = 0;

C:\Dev\MeCab\sdk にlibmecab.libをコピーする

> cd C:\Dev\MeCab\mecab-python3-0.7
> python setup.py build
> python setup.py install

#coding:utf-8
import MeCab
tagger = MeCab.Tagger("-Ochasen")
result = tagger.parse("PythonからMeCab形態素解析機能を使ってみました。")
print(result)
を実行すると

PS C:\Dev\code\python> python samp.py
Traceback (most recent call last):
  File "samp.py", line 3, in <module>
    tagger = MeCab.Tagger("-Ochasen")
  File "C:\Dev\Lang\Python\Python35\lib\site-packages\MeCab.py", line 307, in __init__
    this = _MeCab.new_Tagger(*args)
RuntimeError

が発生します(Win7 Pro x64 だと発生しないのは 謎)

64bitのWindowsにMeCabをインストールするにあるように

環境変数 MECABRC C:\Dev\MeCab\etc\mecabrc を設定することで正常動作を確認