web-dev-qa-db-fra.com

Pourquoi ai-je l'erreur 'lors du chargement des bibliothèques partagées: libGL.so.1: mauvaise classe ELF: ELFCLASS64' lorsque j'exécute Mercury?

Utiliser OpenGL natif

/home/software/Mercury_3.3/c_linux/bin/mercury.x: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS64
6
user45138

On dirait que votre application est une application 32 bits mais tente de charger une bibliothèque 64 bits. Sur une installation 64 bits, vous pouvez avoir les deux versions (32 bits et 64 bits) de toutes les bibliothèques installées. 32 bits se trouvent sous /usr/lib32 et 64bits sous /usr/lib64.

Sous Linux, la recherche dans les bibliothèques s'effectue à l'aide d'une séquence de chemins, un peu comme la variable PATH, répertorie tous les répertoires dans lesquels rechercher le fichier exécutable que vous souhaitez exécuter sans indiquer de chemin. Cette séquence de recherche de bibliothèques est définie dans une variable appelée LD_LIBRARY_PATH.

Le problème est que le répertoire pour les versions à 64 bits vient avant le répertoire avec les versions à 32 bits. Et généralement, le nom de la bibliothèque est identique pour les versions 32bits et 64bits.

Vous pouvez résoudre ce problème en créant un petit script de démarrage pour votre application, comme celui-ci:

#!/bin/bash

export LD_LIBRARY_PATH=/usr/lib32:/usr/lib64:$LD_LIBRARY_PATH

<your binary> $*

S'il existe déjà un script pour démarrer cette application, vous pouvez simplement ajouter la ligne

export LD_LIBRARY_PATH=/usr/lib32:/usr/lib64:$LD_LIBRARY_PATH

à elle, près du sommet.

Je préférerais la première méthode, la création d'un script spécifique, car tout script de démarrage fourni par le paquet sera probablement écrasé en cas de mise à jour.

12
Benoit