查找并修复库的预期位置

查找并修复库的预期位置

普通用户运行的 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 的解决方法。

  1. 我如何才能看到某个程序实际上在哪里寻找库?当它丢失时,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)
  1. 查找特定图书馆的位置列表在哪里?Sudo 能够找到它,那么系统将这些信息保存在哪里?

  2. libGL.so.1我如何更改设置以便系统在 Nvidia 安装文件中而不是 amdgpu-pro 安装中查找。

相关内容