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
 ↓追記↓
#include

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
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 を設定することで正常動作を確認