普通用户运行的 glxgears 无法找到libGL.so.1
:
$ ldd /usr/bin/glxgears
linux-vdso.so.1 => (0x00007ffce3176000)
libGL.so.1 => not found
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd2c5381000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fd2c5047000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd2c4c7c000)
/lib64/ld-linux-x86-64.so.2 (0x0000563b86149000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fd2c4a5a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd2c4856000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fd2c4651000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fd2c444b000)
但是 sudo 可以在 AMD 驱动程序的安装目录中(系统同时具有两个制造商的 GPU)执行此操作:
$ sudo ldd /usr/bin/glxgears
linux-vdso.so.1 => (0x00007ffcb6b8c000)
libGL.so.1 => /opt/amdgpu-pro/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f89792ec000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8978fe3000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8978ca9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f89788de000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f89786c1000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f89784af000)
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f89782ab000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f89780a5000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f8977ea3000)
libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f8977c89000)
libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f8977a86000)
libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f8977883000)
libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f897767d000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f897745b000)
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f8977255000)
libdrm.so.2 => /opt/amdgpu-pro/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f8977040000)
libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f8976e3d000)
libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f8976c36000)
/lib64/ld-linux-x86-64.so.2 (0x000055ac620c0000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8976a31000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f897682d000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8976626000)
而且它还能够找到更多的库。
echo $LD_LIBRARY_PATH
对于普通用户和 root 用户都返回空。这个问题的重点是没有找到使用 LD_LIBRARY_PATH 的解决方法。
- 我如何才能看到某个程序实际上在哪里寻找库?当它丢失时,
ldd
并没有说明它在哪里丢失从。
答:使用 -v:
ldd -v /usr/bin/glxgears
linux-vdso.so.1 => (0x00007ffc90b70000)
libGL.so.1 => /opt/amdgpu-pro/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f2bf1faf000)
查找特定图书馆的位置列表在哪里?Sudo 能够找到它,那么系统将这些信息保存在哪里?
libGL.so.1
我如何更改设置以便系统在 Nvidia 安装文件中而不是 amdgpu-pro 安装中查找。