源码安装openfst启用Python绑定时报错fst/types.h文件未找到
OpenFst 1.8.2 源码编译Python绑定模块报fst/types.h缺失问题排查
报错根因
这个报错和Miniconda环境无直接关联,属于OpenFst 1.8.2版本构建脚本的路径配置问题:
编译Python绑定模块时,构建脚本传入的头文件搜索路径为相对路径-I./../../include,但Python模块的编译工作目录在openfst-1.8.2/extensions/python/.libs/层级,按该相对路径回溯2层只能到openfst-1.8.2/extensions/目录,根本访问不到源码根目录下的include/fst/types.h文件。
此前C++核心库编译无报错,是因为核心库编译工作目录在openfst-1.8.2/src/下,用-I../include的相对路径可以正常定位到头文件,和组件是否编译完成无关。
排查&修复步骤
- 第一步先验证头文件是否真实存在:进入解压后的openfst-1.8.2源码根目录,执行命令
ls include/fst/types.h,如果能正常返回文件路径,即可确认是路径配置问题,无需重新下载源码包。 - 推荐全量重编修复(最稳妥):在源码根目录依次执行以下命令,编译时直接传入include目录的绝对路径,绕开相对路径bug:
make clean ./configure --enable-python CPPFLAGS="-I$(pwd)/include" make -j$(sysctl -n hw.ncpu) # macOS系统用该命令获取CPU核数,Linux系统可替换为nproc sudo make install
- 不想全量重编的快速修复:直接进入Python绑定模块的目录,手动指定头文件路径单独编译该模块:
cd extensions/python make CPPFLAGS="-I$(pwd)/../../include" cd ../../ sudo make install
- 若需要将pywrapfst直接安装到当前使用的logos conda环境中,配置时额外指定prefix参数即可,避免后续手动配置PYTHONPATH:
./configure --enable-python --prefix=/Users/colin/opt/miniconda3/envs/logos CPPFLAGS="-I$(pwd)/include"
编译安装完成后,在conda环境中进入Python执行import pywrapfst验证即可。
注:如果后续遇到运行时链接库找不到的问题,Linux系统执行
sudo ldconfig,macOS系统将/usr/local/lib加入DYLD_LIBRARY_PATH环境变量即可。
内容的提问来源于stack exchange,提问作者Colin Burke
相关产品推荐
相关产品推荐

