web-dev-qa-db-ja.com

Mercuryの実行時に「共有ライブラリのロード中にエラー:libGL.so.1:間違ったELFクラス:ELFCLASS64」が発生するのはなぜですか?

ネイティブOpenGLを使用する

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

アプリケーションは32ビットアプリケーションのように見えますが、64ビットライブラリをロードしようとしています。 64ビットのインストールでは、ライブラリの両方のバージョン(32ビットと64ビット)をインストールできます。 32ビットは/usr/lib32の下に、64ビットは/usr/lib64の下にあります。

Linuxでは、ライブラリはパスシーケンスを使用して検索されます。PATH変数のように、すべてのディレクトリがリストされ、パスが指定されていないときに実行する実行可能ファイルが検索されます。ライブラリを検索するこのシーケンスは、LD_LIBRARY_PATHという変数で定義されます。

問題は、64ビットバージョンのディレクトリが32ビットバージョンのディレクトリよりも先に来ることです。通常、ライブラリの名前は32ビット版と64ビット版で同じです。

この問題のようなアプリケーション用の小さなスタートアップスクリプトを作成することにより、この問題を克服できます。

#!/bin/bash

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

<your binary> $*

このアプリケーションを起動するスクリプトが既にある場合は、次の行を追加するだけです

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

それに、上部近く。

パッケージによって提供されるスタートアップスクリプトは、更新の場合におそらく上書きされるため、特定のスクリプトを作成する最初の方法をお勧めします。

12
Benoit