6 votes

libffi.so.7 : cannot open shared object file : No such file or directory

Je viens de passer à la version 20.10 d'Ubuntu et lorsque j'ai essayé de travailler avec une application Rails qui fonctionnait parfaitement bien auparavant, cette erreur s'est produite.

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

Ma version de Rails : 6.0.3.4 Version de Ruby : 2.7.1p83 J'ai installé ruby en utilisant rbenv Quelqu'un peut-il me dire ce que j'ai raté ?

7voto

Zakaria Points 175

Ubuntu 20.04 est livré avec une bibliothèque partagée appelée libffi.so.7 de l'emballage libffi7 . Cette bibliothèque a été référencée par une de vos gemmes ruby, ffi .

Dans les dépôts standards d'Ubuntu 20.10, il n'y a pas de package libffi7 Il a donc probablement été supprimé de votre système lors de la mise à jour. À la place, Ubuntu 20.10 apporte un paquet nommé libffi8ubuntu1 .

Vous devrez au moins vérifier si l'option libffi8ubuntu1 est installé et réinstaller le paquet ffi afin qu'il fasse référence à libffi8 au lieu de libff7. Je ne sais pas si libffi8 remplace simplement libffi7 dans votre cas d'utilisation, ou si vous devez faire plus de changements. Il est possible que vous deviez attendre que les développeurs en amont de la chaîne (le développeur de la gemme ffi gem et ainsi de suite) ont effectué tous les ajustements nécessaires, puis installent les nouvelles versions.

7voto

Depuis qu'Ubuntu 20.10 est livré avec libff8 au lieu de libffi7 J'ai installé libffi7 en téléchargeant manuellement le paquet deb depuis ubuntu focal (20.04) :

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

Après cela, j'ai pu installer avec succès le ffi gemme.

Cela n'a pas nécessité l'installation ou la modification d'autres paquets. De plus, la bibliothèque partagée par défaut libffi semble être 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

Jusqu'à présent, je n'ai rencontré aucun problème.

3voto

Kenneth Teh Points 31

La réponse de Henning Kockerbeck explique pourquoi cela ne fonctionne pas - la nouvelle version d'Ubuntu ne fournit plus le même paquet système partagé MAIS la gemme a été installée avant la mise à jour et pointe toujours vers l'ancien paquet partagé.

Maintenant, ma solution peut ne pas fonctionner pour vous parce que j'utilise rvm et non rbenv, mais je pense qu'elle peut vous mener sur une voie utile. J'ai réinstallé la version de ruby (pour rvm, cela revient à supprimer toutes les gemmes associées à cette version et à les réinstaller - cette fois en pointant vers le bon paquet partagé).

rvm reinstall --disable-binary 2.5.7

L'équivalent pour rbenv pourrait être :
rbenv uninstall 1.9.3-p0

rbenv install 1.9.3-p0

0voto

makeworld Points 171

Mise à jour de ffi a fonctionné pour moi. Vous pouvez exécuter sudo gem update ffi pour le mettre à jour globalement pour votre système, ou bundle update ffi pour le mettre à jour pour votre projet actuel.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X