Por que recebo 'erro ao carregar bibliotecas compartilhadas: libGL.so.1: classe ELF errada: ELFCLASS64' quando executo o Mercury? [fechadas]

6

Usando o OpenGL nativo

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

1 resposta

12

Parece que seu aplicativo é um aplicativo de 32 bits, mas está tentando carregar uma biblioteca de 64 bits. Em uma instalação de 64bits, você pode ter ambas as versões (32 bits e 64 bits) de quaisquer bibliotecas instaladas. 32bits podem ser encontrados em /usr/lib32 e 64bits em /usr/lib64 .

No Linux, as bibliotecas são pesquisadas usando uma seqüência de caminho, um pouco como a variável PATH, lista todos os diretórios para procurar o executável que você deseja executar quando nenhum caminho é dado. Essa seqüência para procurar por bibliotecas é definida em uma variável chamada LD_LIBRARY_PATH .

O problema é que o diretório para as versões 64bits vem antes do diretório com as versões 32bits. E geralmente o nome da biblioteca é idêntico para a versão de 32bits e 64bits.

Você pode superar esse problema criando um pequeno script de inicialização para seu aplicativo como este:

#!/bin/bash

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

<your binary> $*

Se já houver um script para iniciar este aplicativo, basta adicionar a linha

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

para ele, perto do topo.

Eu prefiro o primeiro método, criando um script específico, já que qualquer script de inicialização fornecido pelo pacote provavelmente será sobrescrito em caso de atualização.

    
por Benoit 20.03.2014 / 12:09