安装 ATI 驱动程序时出现“加载共享库时出错:libGL.so.1:错误的 ELF 类:ELFCLASS32”

安装 ATI 驱动程序时出现“加载共享库时出错:libGL.so.1:错误的 ELF 类:ELFCLASS32”

我按照第 3.2 节的说明进行操作这一页

一切顺利,直到第 8 步,即sudo amdconfig --initial 创建一个新的 xorg.conf 文件,但我收到以下错误:

amdconfig: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS32

/etc/ld.so.conf.d/lib32.conf我尝试创建里面的文件/usr/lib32,作为第二个答案这里建议并运行sudo ldconfig,但没有任何改变。

编辑:安装libgl1-mesa-glx:i386并运行sudo ldconfig,即使重新启动后问题仍然存在。

编辑2:从第一个链接的第七步开始,重新启动后,我的 Unity 的顶部和侧面面板以及仪表板都丢失了,但我假设当我完成驱动程序安装时这个问题会得到修复。

fglrxinfoEDIT3:使用和命令时发生相同的错误glxinfo(在执行步骤7之前glx信息是正常的)。

EDIT4:输出lspci -v | grep -A10 VGA完成输出

00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) (prog-if 00 [VGA controller])
    Subsystem: Dell Device 0572
    Flags: bus master, fast devsel, latency 0, IRQ 45
    Memory at c1000000 (64-bit, non-prefetchable) [size=4M]
    Memory at b0000000 (64-bit, prefetchable) [size=256M]
    I/O ports at 4000 [size=64]
    Expansion ROM at <unassigned> [disabled]
    Capabilities: <access denied>
    Kernel driver in use: i915
01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Chelsea LP [Radeon HD 7730M] (prog-if 00 [VGA controller])
    Subsystem: Dell Device 0572
    Flags: bus master, fast devsel, latency 0, IRQ 16
    Memory at a0000000 (64-bit, prefetchable) [size=256M]
    Memory at c0000000 (64-bit, non-prefetchable) [size=256K]
    I/O ports at 3000 [size=256]
    Expansion ROM at c0040000 [disabled] [size=128K]
    Capabilities: <access denied>
    Kernel driver in use: fglrx_pci

编辑:输出dpkg -S libGL.so.1

       libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
       libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

答案1

注意:

对于 Ubuntu 16.04 LTS 及更高版本,AMD Catalyst 或 fglrx 驱动程序不再受 AMD 支持。

如果您使用的是 16.04 LTS 或更高版本,您很可能只能靠自己了。以下内容仅适用于问题中描述的情况。我不能保证它会在更高版本上起作用。

我们通过评论解决的问题是您在 64 位系统中使用 32 位库。

错误的 ELF 类:ELFCLASS32

该类的结尾应该是 64,因此产生此错误。解决方法是清除 32 位库,然后重新安装 64 位库。

sudo apt-get purge libgl1-mesa-glx:i386
sudo apt-get --reinstall install libgl1-mesa-glx

并刷新我们的 GNU 链接器:

sudo ldconfig

一旦一切正常,ldconfig -p | grep libGL.so.1应该显示:

libGL.so.1 (libc6) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libGL.so.1 (libc6) => /usr/local/lib/libGL.so.1

如果您需要 32 位库来运行 32 位应用程序,您可以通过安装包来实现libgl1-mesa-glx:i386。但在这种情况下,请记住将您的LD_LIBRARY_PATH临时设置为 32 位库所在的位置,这样它就不会弄乱您的其他程序。

 export LD_LIBRARY_PATH="/path/to/library/"
 ./run_some_32_bit_program

答案2

不要直接编辑文件 ld.so.conf,而是在子目录 /etc/ld.so.conf.d 中创建一个名为 local.conf 的文件,其中只包含行 /usr/local/lib。也就是说,

/etc/ld.so.conf.d/local.conf 的内容:

/usr/lib64

然后运行 ​​ldconfig 命令。(假设文件 /etc/ld.so.conf 包含行 include /etc/ld.so.conf.d/*.conf。)

您只需执行一次此操作。

答案3

我在内核更新后突然遇到了同样的问题。我无法登录图形界面。运行“aticonfig”命令时出现此错误,我也在 Xorg.0.log 中发现了此错误。我运行的是 Debian Jessie 64 位系统,其中包含 wine 和 skype 等软件的 32 位库。删除“libgl1-mesa-glx:i386”软件包确实卸载了 skype 和 wine32,但问题并未解决。

我发现 AMD 驱动程序安装程序由于对系统架构的误解而创建了到 32 位库的错误链接,尽管它显然在安装程序中正确识别了架构。

运行该库的本地化命令可能会给您以下信息:

# find / -name libGL.so*
/usr/lib/i386-linux-gnu/libGL.so.1
/usr/lib/i386-linux-gnu/libGL.so
/usr/lib/i386-linux-gnu/libGL.so.1.2
/usr/lib/i386-linux-gnu/libGL.so.1.2.0
/usr/lib/libGL.so
/usr/lib/libGL.so.1.2
/usr/lib/libGL.so.1
/usr/lib64/libGL.so.1.2
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so

但是您会发现“/usr/lib”中的系统标准库确实链接到“/usr/lib/i386-linux-gnu/”中的库版本,这使得 libGL.so.1 库的 32 位版本成为默认版本。此链接是由 AMD 驱动程序安装程序由于对系统结构的误解而创建的。此错误源于系统中有一个“/usr/lib64/”目录。64 位系统没有“/usr/lib64/”文件夹,因为所有 64 位版本的库都位于“/usr/lib/”中。因此,安装程序将系统误认为是 32 位系统,并创建指向 32 位版本的“libGL.so.1”的链接

如何修复它? - 首先运行“/usr/share/ati”中的驱动程序卸载程序

# ls -lah /usr/share/ati
-rw-r--r--   1 root root 2,4K oct 19 20:51 fglrx-install.log
-rwxr--r--   1 root root  18K oct 19 20:51 fglrx-uninstall.sh

这将删除所有错误的链接。

即使完成了这一步,我仍然能够获得图形登录,但会出现没有专有驱动程序的警告。

  • 接下来重命名“/usr/lib64/”目录以禁用它。
    # cd /usr
    # ls -lah
    drwxr-xr-x 182 root root 40K 十月 19 20:50 lib
    drwxr-xr-x 5 root root 4,0K 十月 19 20:40 lib64
    # 密码
    /usr
    # mv lib64 lib64_2015-10-19
    # ls -lah
    drwxr-xr-x 182 root root 40K 十月 19 20:50 lib
    drwxr-xr-x 5 root root 4,0K 十月 19 20:40 lib64_2015-10-19
  • 然后返回 AMD 驱动程序安装程序并再次运行它。

现在您将发现已创建指向 64 位版本 libGL.so.1 的正确链接。

# ls -lah /usr/lib/libGL.so.1.2
lrwxrwxrwx 1 root root 33 oct 19 20:50 /usr/lib/libGL.so.1.2 -> /usr/lib/fglrx/fglrx-libGL.so.1.2

现在您可能能够再次正常获得图形登录。

相关内容