我按照第 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 的顶部和侧面面板以及仪表板都丢失了,但我假设当我完成驱动程序安装时这个问题会得到修复。
fglrxinfo
EDIT3:使用和命令时发生相同的错误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
现在您可能能够再次正常获得图形登录。