Windows环境下BSON gem安装失败问题求助
解决方案:Ruby安装gem时因路径空格导致原生编译失败
问题说明
使用32位Ruby 3.1.2安装bson -v 4.12.1等gem时,频繁出现原生扩展编译失败问题。核心原因是C:\Program Files (x86)\GnuWin32\bin\make.exe路径中的空格未被脚本正确添加引号,导致命令解析错误,系统找不到C:Program这个不存在的路径。
关键错误日志片段:
C:Program Files \(x86\)GnuWin32binmake.exe DESTDIR\= sitearchdir\=./.gem.20221013-364-mygij2 sitelibdir\=./.gem.20221013-364-mygij2 clean make failedNo such file or directory - C:Program
注:bson gem维护方未开放公众Bug反馈渠道,需自行解决路径问题。
可行解决办法
1. 用Windows短路径替代带空格的路径
Windows对含空格的目录支持短路径格式,可直接修改系统PATH:
- 打开系统环境变量设置,找到PATH中的
C:\Program Files (x86)\GnuWin32\bin - 替换为短路径(不确定的话,在CMD中执行
dir /x C:\查看,通常C:\Program Files (x86)对应C:\PROGRA~2) - 重启终端后重新执行
gem install命令
2. 复制make工具到无空格目录
- 新建无空格目录,比如
C:\Tools\GnuWin32\bin - 将
C:\Program Files (x86)\GnuWin32\bin下的make.exe及相关依赖文件复制到新目录 - 将新目录添加到系统PATH最顶部(避免与原有路径冲突)
- 重启终端后重新安装gem
3. 手动修改生成的Makefile
触发错误后,进入报错提示的bson扩展目录(示例路径:C:/Ruby31/lib/ruby/gems/3.1.0/gems/bson-4.12.1/ext/bson):
- 打开生成的
Makefile,找到定义MAKE变量或调用make的行 - 将错误的路径替换为带引号的完整路径:
"C:\Program Files (x86)\GnuWin32\bin\make.exe" - 在该目录下手动执行
make和make install,完成后即可正常使用该gem
4. 切换到RubyInstaller自带的MSYS2环境
若使用RubyInstaller安装的Ruby,推荐用自带的MSYS2工具链替代GnuWin32:
- 打开RubyInstaller的
Start Command Prompt with Ruby终端,执行ridk install安装MSYS2组件 - 在该终端内执行gem安装命令,MSYS2工具链路径无空格,可直接规避此类问题
内容的提问来源于stack exchange,提问作者alilland
相关产品推荐
相关产品推荐

