Mac环境Node.js安装Pocketsphinx遇SWIG_DIR缺失CMake错误求助
解决Mac上npm安装pocketsphinx时CMake找不到SWIG的问题
我之前在Mac上折腾pocketsphinx的时候也碰到过完全一样的坑!明明终端能正常执行swig命令,CMake就是死活找不到,还一直报SWIG_DIR缺失的错误。其实核心原因是CMake没自动识别到SWIG的配置文件路径,咱们一步步来搞定:
第一步:确认SWIG的实际安装信息
先搞清楚你的SWIG到底装在哪、版本是否达标:
- 运行
swig -version,先确认版本是3.0.7及以上(如果版本不够,后面得重新安装),同时注意输出里的安装目录(比如brew安装的话会显示类似/usr/local/Cellar/swig/4.1.1/的路径) - 再运行
which swig找到可执行文件的位置,比如/usr/local/bin/swig,它的父目录就是SWIG的安装根目录
第二步:手动给CMake指定SWIG路径
npm安装pocketsphinx时会调用CMake,我们可以通过环境变量直接告诉CMakeSWIG的位置:
- 先找到SWIG的CMake配置文件目录,一般是
[你的SWIG安装根目录]/share/cmake/SWIG/,比如brew装的可能是/usr/local/Cellar/swig/4.1.1/share/cmake/SWIG/ - 在终端里设置两个环境变量(替换成你自己的实际路径):
export SWIG_DIR=/usr/local/Cellar/swig/4.1.1/share/cmake/SWIG/ export SWIG_EXECUTABLE=/usr/local/bin/swig - 接着再运行
npm install pocketsphinx
第三步:如果环境变量不管用,直接给npm传CMake参数
有些情况下npm的安装脚本需要直接传递CMake参数,你可以试试这个命令(同样替换成你的实际路径):
npm install pocketsphinx --cmake.args="-DSWIG_DIR=/usr/local/Cellar/swig/4.1.1/share/cmake/SWIG/ -DSWIG_EXECUTABLE=/usr/local/bin/swig"
第四步:清理冲突的SWIG版本(极端情况)
如果你之前在多个位置装过SWIG,可能会有版本冲突,建议彻底清理后重装:
- 卸载brew的SWIG:
brew uninstall swig - 卸载npm全局和本地的SWIG:
npm uninstall -g swig && npm uninstall swig - 重新安装符合要求的版本(比如4.x,肯定满足3.0.7+):
brew install swig@4 - 把新版本链接到全局:
brew link swig@4 --force - 然后回到第二步设置环境变量,再安装pocketsphinx
内容的提问来源于stack exchange,提问作者MysteryPancake
相关产品推荐
相关产品推荐

