为什么我在运行 Mercury 时会收到“加载共享库时出错:libGL.so.1:错误的 ELF 类:ELFCLASS64”?

use*_*138 6 shared-library debian

使用原生 OpenGL

/home/software/Mercury_3.3/c_linux/bin/mercury.x: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS64
Run Code Online (Sandbox Code Playgroud)

Ben*_*oit 12

看起来您的应用程序是 32 位应用程序,但正在尝试加载 64 位库。在 64 位安装中,您可以安装任何库的两个版本(32 位和 64 位)。32bits 下可以找到/usr/lib3264bits 下/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> $*
Run Code Online (Sandbox Code Playgroud)

如果已经有一个脚本来启动这个应用程序,你可以添加这行

export LD_LIBRARY_PATH=/usr/lib32:/usr/lib64:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

到它,靠近顶部。

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