5 votes

Comment démarrer la version Linux de X3 : Reunion de GOG sous Fedora ?

Hoi, j'ai récemment acheté la version Linux de X3 : Reunion sur GOG, mais je ne trouve pas le moyen de la lancer.

Mon système : Fedora Version 32, 64 bits

Je suis allé via le terminal dans le dossier X3 Reunion et l'ai démarré par :

./start.sh

Ce qui m'a donné :

./X3R_config: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory

J'ai regardé dans le dossier /usr/lib/ y libgtk-x11-2.0.so.0 était là.

Puis j'ai pensé, oh, j'ai oublié d'installer les programmes mentionnés sur la page GOG.

Qui étaient :

Les paquets suivants doivent être installés : libc6:i386 libasound2:i386 libasound2-data:i386 libasound2-plugins:i386 libgtk2.0-0:i386 libxml2:i386 et dépendances. Ce jeu est livré avec un binaire 32 bits uniquement

Grâce à des recherches sur Internet, je pense avoir trouvé les programmes Fedora correspondants et les avoir installés :

  • glibc-devel.i686, qui a installé libxcrypt-devel.i686 comme dépendance
  • alsa-lib.i686 (était déjà installé)
  • alsa-lib-devel.i686
  • alsa-plugins-pulseaudio.i686 (parce que pulseaudio était le seul à être installée dans la version 64 bits, j'ai pensé que ce serait celle pour ce jeu)
  • gtk2.i686, qui a installé atk.i686, gdk-pixbuf2-modules.i686 et jasper-libs.i686 comme dépendances
  • libxml2.i686
  • libxml2-devel.i686, qui a installé cmake-filesystem.i686, xz-devel.i686, xz-devel.x86_64 et zlib-devel.i686 comme dépendances

J'ai ensuite essayé de relancer le jeu, mais cette fois, j'ai eu droit à :

./X3R_config: lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /lib/libpng16.so.16)

En faisant quelques recherches, je suis arrivé sur ce site : https://stackoverflow.com/questions/48306849/lib-x86-64-linux-gnu-libz-so-1-version-zlib-1-2-9-not-found

et j'ai essayé la deuxième solution :

cd /your_software/../lib/ (the directory containing libz.so.1)
mv libz.so.1 libz.so.1.old
ln -s /lib/x86_64-linux-gnu/libz.so.1

Parce que dans Fedora il n'y a pas lib/x86_64-linux-gnu/ J'ai découvert que le dossier correspondant devrait être lib64

C'est ce que j'ai fait :

cd /usr/lib/
sudo mv libz.so.1 libz.so.1.old
sudo ln -s /lib64/libz.so.1

Malheureusement, cela n'a pas aidé.


Récemment, j'ai eu un cas similaire avec la version Linux de Mount & Blade : Warband de GOG, qui m'a donné après le démarrage quelque chose comme ceci :

error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory

Mais la solution pour Mount & Blade : Warband était :

sudo ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4

Et Mount & Blade : Warband a commencé après ça normalement.

Peut-être que cela vous aidera ou vous donnera une idée supplémentaire sur la manière de faire démarrer X3 : Reunion...


Si j'ai oublié quelque chose, je l'ajouterai. Je n'utilise Linux que pour la navigation et un peu de bureautique/jeux, donc en fin de compte, je ne suis qu'un débutant ;)

Merci d'avance.


Petite mise à jour

J'ai donc mis la libz.so.1, que j'ai compilée à partir des sources comme @aphid l'a montré, dans le fichier ~/GOG Games/X3 Reunion/game/lib/ mais a renommé l'ancien dossier libz.so.1 à libz.so.1.old .

puis j'ai eu :

./start.sh 
Running X3: Reunion
Language detected: English
./X3R_config: symbol lookup error: /lib/libxcb-shm.so.0: undefined symbol: xcb_send_request_with_fds

ce qui m'a conduit à :

ce

où quelqu'un a eu le même problème, mais pour X3 Terran War.

Eh bien oui, c'est un autre jeu, mais la même série, alors j'ai pensé que ce qui suit pourrait fonctionner :

La solution était de supprimer le dossier lib dans le dossier racine du jeu (celui à côté de docs, game, start.sh.,...) et de garder dans le dossier lib situé dans games only avec :

libavcodec.so.53
libavformat.so.53
libavutil.so.51
libbz2.so.1.0
libcrypto.so.1.0.0
libGLEW.so.1.13
libswscale.so.2

Bien sûr, j'ai gardé le ~/GOG Games/X3 Reunion/lib y ~/GOG Games/X3 Reunion/game/lib/ avant de faire cela

qui m'a eu :

./start.sh 
Running X3: Reunion
Language detected: English
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  107
  Current serial number in output stream:  106

ce qui m'a conduit à rechercher failed to load driver: swrast à ça :

Réponse n°6

Alors peut-être que les librairies 32-bit-nvidia pourraient aider, ou entreraient-elles en conflit avec les librairies 64-bit actuelles ? X3 : Reunion est un jeu uniquement 32 bits après tout.

Ceux actuellement installés qui sont des paquets 64 bits :

akmod-nvidia-340xx
kmod-nvidia-340xx-5.11.11-100.fc32.x86_64
kmod-nvidia-340xx-5.11.12-100.fc32.x86_64
kmod-nvidia-340xx-5.11.14-100.fc32.x86_64
nvidia-texture-tools
xorg-x11-drv-nvidia-340xx
xorg-x11-drv-nvidia-340xx-kmodsrc
xorg-x11-drv-nvidia-340xx-libs
xorg-x11-drv-nvidia-libs

J'installerais alors simplement les .i686...

Ou cette option serait-elle une impasse ?


Mise à jour 2

Ok, j'ai installé les bibliothèques nvidia 32-bit et ça démarre maintenant. J'ai reçu de l'aide de aquí .

J'ai également découvert qu'il se déclenche lorsque vous supprimez/renommez le fichier ~/GOG Games/X3 Reunion/lib dossier. Et vous pouvez conserver tous les fichiers dans le ~/GOG Games/X3 Reunion/game/lib/ mais nous avons dû remplacer la libz.so.1 par la libz.so.1 compilée précédemment.

Je vais rédiger une réponse détaillée dans la section des réponses à cette question maintenant.

2voto

aphid Points 7356

Vous devez installer zlib.i686 en plus de l'ordinaire zlib (x64), et (forcer) votre jeu à s'y lier. Cela peut fonctionner immédiatement, ou vous devrez peut-être utiliser des liens symboliques pour que le jeu charge la version correcte de la bibliothèque.

L'ancienne version de zlib dont j'ai besoin n'a plus d'installateur, comment puis-je l'installer à partir des sources ?

Si le jeu recherche spécifiquement la version 1.2.9 (une version obsolète), nous pourrions essayer d'utiliser une version plus récente, mais cela pourrait provoquer des bogues ou des plantages (bien que cela soit peu probable ; il s'agit d'une bibliothèque de compression qui devrait être rétrocompatible). Il n'y a donc pas de paquetage facile à installer, ce qui signifie que vous devrez compiler le code vous-même.

Pour cela, vous avez besoin d'un compilateur. Jetez un coup d'oeil au fichier Makefile.in . Il contient toutes les instructions pour compiler le programme. Il semble également être écrit en C Nous avons donc besoin d'un compilateur C. Je recommande d'installer soit gcc o clang via votre gestionnaire de paquets si vous ne les avez pas déjà.

Je recommande de créer un répertoire de travail (dans cet exemple : ~/zlib129/ ). Si vous êtes paranoïaque, vous pouvez chrooter dans ce répertoire pour empêcher toute commande exécutée pour compiler du code d'affecter le reste de votre système. Les commandes à exécuter ressembleraient alors à

# Creates a directory to house the source code
mkdir ~/zlib129/
mkdir ~/zlib129/source/
# Create a directory to house the output of the compilation
mkdir ~/zlib129/chroot/
# Go into the directory
cd ~/zlib129/source/
# Download the zlib archive
wget https://zlib.net/fossils/zlib-1.2.9.tar.gz
# Extract it, skipping the root folder. 
tar -xvzf zlib-1.2.9.tar.gz --strip-components=1
# Let's check out how to compile it
nano makefile.in
### Read the instructions on how to compile...
./configure 
make install prefix=/home/grubbel/zlib129/chroot/
### Move the library to where we want it. 
### One easy thing to just do is put it in the game's lib folder (if it has one preconfigured). 
mv ~/zlib129/chroot/lib/libz.so.1 /path/to/game/lib/libz.so.1

Note : Si vous parvenez à compiler la bibliothèque, mais que le jeu ne la trouve pas dans son propre dossier, essayez alors d'utiliser la fonction LD_LIBRARY_PATH l'astuce de la variable d'environnement de mon commentaire.

La raison pour laquelle votre solution ne fonctionne pas :

Les bibliothèques système existent généralement en deux versions, en plus d'un grand nombre de versions. En général, ces deux versions (64 bits et l'ancienne 32 bits) sont placées dans des dossiers différents. Habituellement, quelque chose de semblable à /lib contre /lib64 . Pour des raisons historiques, les distributions n'ont pas la même convention d'appellation pour cela.

En établissant un lien symbolique vers cette bibliothèque, vous essayez de charger une bibliothèque 64 bits dans un binaire 32 bits. Cela ne fonctionnera pas, car la bibliothèque tailles des pointeurs sont différentes. Les pointeurs sont une chose que tous les programmes C et C++ doivent utiliser pour transmettre des variables (telles que des tampons contenant des données ou du texte) entre eux.

Un pointeur est un nombre qui pointe vers un emplacement dans la mémoire ; le N-ième octet dans la mémoire virtuelle. 32 bits (ou i686 Le nom de l'omniprésence de la technologie 32-bit Intel série de processeurs 286..386..486, etc.), les programmes, comme leur nom l'indique, utilisent des pointeurs d'une largeur de 32 bits, soit 4 octets. 64 bits En revanche, les programmes utilisent des pointeurs d'une largeur de 64 bits, soit 8 octets.

Ainsi, lorsque zlib attend un pointeur vers une chaîne à compresser, il attend une adresse 64 bits. Il y aurait une erreur de segmentation (le système d'exploitation met fin aux programmes qui tentent d'accéder à une mémoire inexistante ou non disponible) et se planterait si vous lui donniez une adresse de 32 bits, car les 32 bits restants seraient remplis de déchets aléatoires. Il en va de même dans l'autre sens : le jeu ne serait pas en mesure d'interpréter une adresse 64 bits renvoyée par la bibliothèque, car elle ne tiendrait pas dans la variable.

Il est probable que votre éditeur de liens ne vous laissera même pas faire et se plaindra bruyamment au lieu de laisser votre application s'arrêter et prendre feu.

Pourquoi dois-je parfois établir des liens symboliques avec ces bibliothèques ?

Le jeu n'a pas été conçu en tenant compte du fait qu'un jour, plusieurs tailles de pointeurs pourraient être utilisées sur le même système. Il a également été réalisé sur un système linux où les bibliothèques peuvent être en format /lib au lieu de /usr/lib et cela peut avoir été codé en dur. Il y a beaucoup plus de distributions linux de nos jours et les conventions ont changé. Choses généralement fonctionnent mais vous devrez peut-être bricoler pour que les anciens programmes se comportent correctement.

Quand il a été programmé, les PC 64 bits n'existait pas encore . En ce qui le concerne, un pointeur est un entier non signé de 32 bits. En fait, beaucoup de développeurs de jeux se trompent même sur ce point et utilisent librement des entiers signés, ce qui explique pourquoi certains jeux plus anciens plantent dès qu'ils atteignent 2 Go de mémoire et pourquoi Windows a un drapeau spécial que le programmeur doit activer avant qu'une application 32 bits puisse dépasser 2 Go de mémoire.

1voto

Omkant Points 4781

Donc, comment j'ai fait pour que X3 : Reunion fonctionne sur Fedora :

1.) Installez les paquets suivants :

glibc-devel.i686
  which should install as dependencies:
    libxcrypt-devel.i686
alsa-lib.i686
alsa-lib-devel.i686
alsa-plugins-pulseaudio.i686
gtk2.i686
  which should install as dependencies:
    atk.i686, gdk-pixbuf2-modules.i686 and jasper-libs.i686
libxml2.i686
libxml2-devel.i686
  which should install as dependencies:
    cmake-filesystem.i686, xz-devel.i686, xz-devel.x86_64 and zlib-devel.i686 

2.) Obtenez l'ancienne version de zlib à partir de aquí et le compiler.

# Create a directory to house the source code
mkdir ~/zlib129/
mkdir ~/zlib129/source/
# Create a directory to house the output of the compilation
mkdir ~/zlib129/chroot/
# Go into the directory
cd ~/zlib129/source/
# Download the zlib archive
wget https://zlib.net/fossils/zlib-1.2.9.tar.gz
# Extract it, skipping the root folder. 
tar -xvzf zlib-1.2.9.tar.gz --strip-components=1
# Let's check out how to compile it
nano makefile.in
### Read the instructions on how to compile...
./configure 
make install prefix=/home/YourUsername/zlib129/chroot/
### Move the library to where we want it. 
### But rename the old one first.
mv ~/GOG Games/X3 Reunion/game/lib/libz.so.1 ~/GOG Games/X3 Reunion/game/lib/libz.so.1.old
mv ~/zlib129/chroot/lib/libz.so.1 ~/GOG Games/X3 Reunion/game/lib/libz.so.1

3.) Installez les librairies nvidia 32-bit ou simplement les librairies 32-bit de votre pilote gpu respectif, dans cette réponse je vais couvrir celle de nvidia.

Juste :

sudo dnf install xorg-x11-drv-nvidia-340xx-libs.i686 

ou

sudo dnf install xorg-x11-drv-nvidia-libs.i686

Le dernier semble être pour les nouveaux gpus alors que le premier était pour mon gpu, j'en ai un assez vieux. Si vous avez aussi un gpu plus ancien, mais pas le pilote de la version 340, remplacez simplement le 340 par votre version.

4.) Supprimez ensuite le dossier ~/GOG Games/X3 Reunion/lib ou renommez-le et lancez le jeu.

Et c'est tout, je vous souhaite un bon jeu.


Merci à aphid d'ici et à PabloTwo du FedoraForum.


Les sources de recherche étaient :

https://stackoverflow.com/questions/48306849/lib-x86-64-linux-gnu-libz-so-1-version-zlib-1-2-9-not-found

https://www.gog.com/forum/x_series/x3_terran_war_linux_shared_library_issues

https://bbs.archlinux.org/viewtopic.php?pid=1864555#p1864555

https://forums.fedoraforum.org/showthread.php?326065-Will-32-bit-nvidia-libraries-interfere-with-the-64-bit-ones

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X