libffi.so.7:无法打开共享对象文件:没有此文件或目录

libffi.so.7:无法打开共享对象文件:没有此文件或目录

我刚刚升级到 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软件包是否已安装并重新安装ffigem,以便它引用 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 的安装方式。

相关内容