ネイティブOpenGLを使用する
/home/software/Mercury_3.3/c_linux/bin/mercury.x: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS64
アプリケーションは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
それに、上部近く。
パッケージによって提供されるスタートアップスクリプトは、更新の場合におそらく上書きされるため、特定のスクリプトを作成する最初の方法をお勧めします。