如何解决WSL运行Ruby on Rails时出现“LoadError: cannot load such file -- 2.5/ffi_c”错误
排查解决步骤
- 首先安装系统层面的libffi依赖,以Ubuntu/Debian系为例执行:
sudo apt update && sudo apt install -y libffi8 libffi-dev
如果你用的是其他WSL发行版,对应安装libffi.so.8对应的系统包即可。 - 刷新动态链接库缓存并验证依赖:执行
sudo ldconfig刷新缓存后,运行ldd /home/me/.rvm/gems/ruby-2.5.7/gems/ffi-1.11.1/lib/ffi_c.so查看ffi_c.so的所有动态依赖是否都能被正常识别。如果仍提示libffi.so.8找不到,确认你之前创建的软链接路径是否正确:软链接必须放在系统动态库搜索目录(如/usr/lib、/usr/lib/x86_64-linux-gnu)下,不能在任意工作目录创建,正确的命令参考:sudo ln -s /usr/lib/x86_64-linux-gnu/libffi.so.8 /usr/lib/x86_64-linux-gnu/libffi.so.1.8
你可以先用find /usr/lib -name "libffi.so*查找你系统中libffi.so.8的实际存储路径,再对应创建软链接。 - 重装ffi gem时强制使用系统libffi编译,避免gem内置的源码编译出现兼容问题:
先卸载原有版本:gem uninstall ffi -v 1.11.1 --all
再指定参数编译安装:gem install ffi -v 1.11.1 -- --enable-system-libffi - 排查Spring缓存问题:你的报错栈中存在Spring相关调用,先执行
bin/spring stop关闭Spring缓存,再重新运行命令测试,也可以临时禁用Spring运行:DISABLE_SPRING=1 rails apartment:create - 排除WSL挂载盘兼容问题:不要把Rails项目放在/mnt/c的Windows挂载目录中运行,WSL对Windows挂载盘的文件权限、动态库加载都存在已知兼容问题,把项目复制到WSL原生的Linux目录(如/home/me/下的自建目录)后再运行测试。
- 如果以上步骤都无效,确认你的WSL发行版和旧版本Ruby的兼容性:Ruby 2.5已经停止维护多年,如果你用的是Ubuntu 22.04及以上版本的WSL,系统默认依赖已经不兼容旧版Ruby,可以尝试将WSL发行版降级到Ubuntu 20.04,或者替换RVM为rbenv安装Ruby,规避RVM的依赖封装问题。
内容的提问来源于stack exchange,提问作者dikuw
相关产品推荐
相关产品推荐

