当我运行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

1你能不能至少解释一下你在试图做什么? - Braiam
1个回答

看起来你的应用程序是一个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

在它附近的顶部。

我更喜欢第一种方法,创建一个特定的脚本,因为包提供的任何启动脚本在更新的情况下可能被覆盖。