Les jeux ont des dépendances: Donc certains jeux 32 bits dépendent de librairies 32 bits. Il est impératif de les installer pour pouvoir jouer à ces jeux.
Il n'est pas rare qu'en lançant un ancien jeu de GOG, HumbleBundle ou itch.io le jeu se plaigne de librairies manquantes (.so) sur les distributions récentes, car les développeurs n'ont pas révisé et recompilé leurs jeux en prenant en compte l'évolution des systèmes d'exploitation. Erreur typique:
./start.sh Running Hyper Light Drifter ./HyperLightDrifter.x86: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
Ce que le jeu est en train de vous dire, c'est qu'il a besoin de la librairie libcrypto.so.1.0.0
. Or cette dernière a totalement disparu des distributions Debian et dérivées récentes (Ubuntu, Linux Mint, etc.).
C'est pour cela que je vous propose cette ligne pour installer un bon nombre de librairies qui satisferont la majorité des jeux 32 bits.
sudo apt install libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxcursor1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxinerama1:i386 libxrandr2:i386 libxrender1:i386 libglu1:i386 libcurl3:i386 libgtk2.0-0:i386 libopenal1:i386 libxtst6:i386 libssl1.0.0:i386 libnss3:i386 libgconf-2-4:i386
:386
signifique que c'est la version 32 bits de la librairie qu'ont veut installer. Les jeux qui se plaignent de librairie manquant ne vous indiqueront pas s'il veulent la 32 ou 64 bits (cela dépend de l'exécutable du jeu ; voir plus loin dans cette page).
Le soucis est que d'une version d'une distribution à l'autre, certains de ces paquets disparaissent des dépôts officiels et ne sont donc plus installables. (Donc à vous de retirer de cette ligne les paquets qui n'existent plus dans votre distribution.)
Il existe un moyen de résoudre ce problème de dépendance à des librairies et paquets qui n'existent plus. Mais c'est un petit jeu d'enquête. Nous prendrons pour exemple ci-dessous le jeu HyperLight Drifter et 2x0ng mais cette méthode peut s'appliquer à d'autres jeux et logiciels.
Nous allons prendre ici l'exemple d'HyperLight Drifter sous Ubuntu 20.04.
On va prendre l'installeur de chez GOG, gog_hyper_light_drifter_2.6.0.7.sh
. Il s'agit d'un jeu 32 bits.
Après installation, dans le répertoire du jeu, vous verrez un fichier deps.txt
: Les développeurs ont gentiment indiqué les dépendances à installer.
libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libcurl3:i386 libgtk2.0-0:i386 libopenal1:i386 libglu1:i386
Donc un petit apt install
et le problème est réglé ? Malheureusement non: Le paquet libcurl3:i386 ne semble plus exister dans les dépôts d'Ubuntu 20.04.
>sudo apt install libcurl3:i386 E: Le paquet « libcurl3:i386 » n'a pas de version susceptible d'être installée
Installez tout de même les autres paquets:
sudo apt install libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libgtk2.0-0:i386 libopenal1:i386 libglu1:i386
Essayons de lancer le jeu:
./start.sh Running Hyper Light Drifter ./HyperLightDrifter.x86: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
Cherchons s'il n'y aurait pas un autre paquet dans les dépôts de notre distribution qui aurait ce fichier.
sudo apt install apt-file sudo apt-file update
>apt-file search libcrypto.so.1.0.0 nsight-compute: /usr/lib/nsight-compute/host/linux-desktop-glibc_2_11_3-x64/libcrypto.so.1.0.0 nsight-systems: /usr/lib/nsight-systems/Host-x86_64/libcrypto.so.1.0.0
>apt download nsight-systems:i386 E: Impossible de trouver le paquet nsight-systems:i386 >apt download nsight-compute:i386 E: Impossible de trouver le paquet nsight-compute:i386
libcrypto.so.1.0.0
libssl1.0.0_1.0.1t-1+deb8u12_i386/usr/lib/i386-linux-gnu
dans le répertoire du jeu.LD_LIBRARY_PATH=$(pwd) ./start.sh Running Hyper Light Drifter ./HyperLightDrifter.x86: /lib/i386-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by ./HyperLightDrifter.x86)
Visiblement, on a réglé le problème de la libcrypto.so.1.0.0, mais il lui manque maintenant autre chose.
Le message d'erreur n'est pas forcément très explicite mais là libcurl.so.4
est en train de vous parler. Ce qui veut dire que le jeu a démarré en utilisant libcurl4. On sait que le jeu nécessite libcurl3. On va donc aller récupérer aussi de force libcurl.so.3.
Même méthode de recherche, on trouve le paquet https://packages.debian.org/stretch/libcurl3 et on télécharge sa version i386. On décompresse et on copie tous les fichiers de libcurl3_7.52.1-5+deb9u12_i386/usr/lib/i386-linux-gnu
dans le répertoire du jeu également.
On relance le jeu:
LD_LIBRARY_PATH=$(pwd) ./start.sh Running Hyper Light Drifter ./HyperLightDrifter.x86: error while loading shared libraries: libssh2.so.1: cannot open shared object file: No such file or directory
Problème de libcurl3 résolu ! Mais oui, il veut encore une autre lib. Oui, c'est encore à vous d'aller la chercher à la main.
Continuez ainsi pour chaque librairie manquante. Oui, c'est long, c'est chiant. En fait vous êtes en train de faire à la main la résolution des dépendances comme le fait habituellement le gestionnaire de paquets de votre distribution.
Pour HyperLight Drifter, on sera allé télécharger à la main les fichiers suivants:
On démarre maintenant le jeu:
LD_LIBRARY_PATH=$(pwd) ./start.sh Running Hyper Light Drifter *************************************** * YoYo Games Linux Runner V1.3 * *************************************** CommandLine: -game game.unx ...
Miracle, il fonctionne !
(Site web: https://dto.itch.io/2x0ng)
file
: >file 2x0ng.bin 2x0ng.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=34c013f6e5dea38e51e9813049919387ebe7d266, with debug_info, not stripped
debugger invoked on a SIMPLE-ERROR in thread #<THREAD "main thread" RUNNING {C618C71}>: Error opening shared object "libSDL-1.2.so.0": libSDL-1.2.so.0: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type.
>apt-file search libSDL-1.2.so.0 libsdl1.2debian: /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 libsdl1.2debian: /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0.11.4
sudo apt install libsdl1.2debian:i386
sudo apt install libsdl-gfx1.2-dev:i386
sudo apt install libsdl-mixer1.2-dev:i386
sudo apt install libsdl-ttf2.0-0:i386
sudo apt install libsdl-image1.2:i386
Pour résumer, pour ce jeu on pourra se contenter de ce qu'il y a dans les dépôts d'Ubuntu 20.04:
sudo apt install libsdl1.2debian:i386 libsdl-gfx1.2-dev:i386 libsdl-mixer1.2-dev:i386 libsdl-ttf2.0-0:i386 libsdl-image1.2:i386
Cette méthode de recherche des packages manquants a été appliquée avec succès sur des jeux qui ne voulaient pas démarrer: