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

为什么我运行 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

您的应用程序似乎是一个 32 位应用程序,但正在尝试加载 64 位库。在 64 位安装中,您可以安装任何库的两个版本(32 位和 64 位)。32 位可以在 下找到,/usr/lib3264 位可以在 下找到/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

靠近顶部。

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

相关内容