我刚刚升级到 ubuntu 20.10,当我尝试使用之前运行良好的 rails 应用程序时开始显示此错误。
LoadError: libffi.so.7: cannot open shared object file: No such file or directory -
/home/mahmud/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/ffi-1.13.1/lib/ffi_c.so
我的 rails 版本:6.0.3.4 Ruby 版本:2.7.1p83 我使用 rbenv 安装了 ruby 有人能告诉我我搞砸了什么吗?
答案1
由于 Ubuntu 20.10 自带了libff8
而不是libffi7
,我libffi7
通过从 ubuntu focal (20.04) 手动下载 deb 包来安装:
wget http://es.archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi7_3.3-4_amd64.deb
sudo dpkg -i libffi7_3.3-4_amd64.deb
之后我就可以成功安装该ffi
宝石了。
这不需要安装或更改任何其他软件包。此外,默认的 libffi 共享库似乎是 libffi8:
$ ldconfig -p | grep ffi
libffi.so.8 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libffi.so.8
libffi.so.8 (libc6) => /usr/lib/i386-linux-gnu/libffi.so.8
libffi.so.7 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libffi.so.7
libffi.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libffi.so
$ ls -l /usr/lib/x86_64-linux-gnu/libffi.so
lrwxrwxrwx 1 root root 15 ago 20 11:31 /usr/lib/x86_64-linux-gnu/libffi.so -> libffi.so.8.1.0
到目前为止我还没有遇到任何问题。
答案2
Ubuntu 20.04 附带了一个名为 的共享库libffi.so.7
,来自软件包libffi7。此库已被您的一个 ruby gem 引用,菲。
在 Ubuntu 20.10 的标准存储库中不再有软件包libffi7
,因此它可能已在升级过程中从您的系统中删除。相反,Ubuntu 20.10 带来了一个名为libffi8ubuntu1。
您至少需要检查libffi8ubuntu1
软件包是否已安装并重新安装ffi
gem,以便它引用 libffi8 而不是 libff7。我不知道 libffi8 是否只是在您的用例中替换了 libffi7,或者您是否需要进行更多更改。可能您需要等到链上开发人员(gem 的开发人员ffi
等)进行了必要的调整,然后安装新版本。
答案3
Henning Kockerbeck 的回答解释了为什么它不起作用 - 较新的 Ubuntu 版本不再提供相同的共享系统包,但 gem 是在升级之前安装的,并且仍然指向旧的共享包。
现在,我的修复可能对您不起作用,因为我使用的是 rvm 而不是 rbenv,但我认为它可能会为您带来一条有用的途径。我重新安装了 ruby 版本(对于 rvm,这几乎会删除与该版本相关的所有 gem 并重新安装它们 - 这次指向正确的共享包)。
rvm reinstall --disable-binary 2.5.7
rbenv 的等效项可能是:
rbenv uninstall 1.9.3-p0
rbenv install 1.9.3-p0
答案4
我知道这是两年后的事了,但我在尝试在 vscode 中调试 python 时遇到了这个错误。
这种情况开始发生是因为我运行了以下命令(这是在之后建议的apt upgrade
):
sudo apt autoremove
<- 这导致了问题
就我的情况来说,修复方法非常简单:
sudo apt install libffi7
所以我猜想修复取决于 ffi 的安装方式。