Windows下编译安装kenlm

Kenlm是NLP任务中常用工具,用来构建统计学语言模型。kenlm本身是使用C++开发,并提供了python语言下的封装。本文关注如何在windows平台下源码构建kenlm,不依赖pip,不依赖cygwin/mingw/msys。

kenlm官方对于windows平台下的构建语焉不详,很多大哥们也是一遇到编译错误就放弃,然而实际上是完全可以通过编译的。本文编译通过CMake生成msvc项目文件,在命令行中用msbuild完成编译。

环境准备

首先是安装Visual Studio,我这里用的是VS2022,对应编译套件msvc 14.3。打开Developer Command Prompt for VS 2022,查看msbuild的具体位置。后面为了使用conda环境,我们不在这个命令行里进行编译。

image

为了准备编译环境,强烈建议使用 miniconda 创建单独的编译环境,后续的工作也在该环境下展开,能省去非常多的配置PATH等恶心的事情。

conda create -n slm python=3.9

创建的时候关注下有没有zlib/bzlib/xzlib这几个库,后续编译都是会依赖的。

进一步安装Boost库,注意配置环境变量BOOST_INCLUDEDIRBOOST_LIBRARYDIR.

image

编译

进入 kenlm 源码文件夹,在 powershell 内激活准备好的 conda 环境。

conda activate slm
mkdir build
cd build
cmake ..

注意cmake日志,关注使用的msvc版本是否和前面msbuild一致,以及各项依赖是否都满足。我这里缺失Eigen3,不影响编译。

生成之后,目录内应该包含项目文件ALL_BUILD.vcxproj

image

由于一个恶性bug( https://github.com/pybind/pybind11/issues/3891 ),生成的项目文件会依赖一个叫optimized.lib的库,然而这项依赖是由于引入boost导致的。因此需要修改CMakeLists.txt,删除此处的条件表达式。

image

使用 msbuild 完成编译。

& 'C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\amd64\MSBuild' .\ALL_BUILD.vcxproj /t:build /property:Configuration=Release
posted @ 2023-02-13 01:09  RocKeyboard  阅读(1388)  评论(0)    收藏  举报