ldd 找不到路径,如何添加

C-J*_*Jay 14 linux debugging path linker ld

我知道这个问题不是很新,但似乎我无法解决我自己的问题。

ldd 生成以下输出

u123@PC-Ubuntu:~$ ldd /home/u123/Programme/TestPr/Debug/TestPr
    linux-vdso.so.1 =>  (0x00007ffcb6d99000)
    libcsfml-window.so.2.2 => not found
    libcsfml-graphics.so.2.2 => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcebb2ed000)
    /lib64/ld-linux-x86-64.so.2 (0x0000560c48984000)
Run Code Online (Sandbox Code Playgroud)

哪个是告诉ld正确路径的正确方法?

SHW*_*SHW 17

如果您的库不在标准路径上,那么您需要将它们添加到路径或将非标准路径添加到 LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<Your_non-Standard_path>
Run Code Online (Sandbox Code Playgroud)

完成上述任何一项操作后,您需要通过执行以下命令来更新动态链接器运行时绑定:

sudo ldconfig
Run Code Online (Sandbox Code Playgroud)

更新:

您可以通过将上述export行写入其中一个启动文件(例如 ~/.bashrc),或者如果底层库与任何其他库不冲突,然后将其放入标准库路径之一(例如 /lib、 /usr/lib)


Tho*_*key 15

LD_LIBRARY_PATH适用于短期测试,但由于只有一个变量,当您可能有多个带有自定义库的应用程序时,使用起来很尴尬。

Debian/Ubuntu 通常的方法是将它添加到加载程序的配置中,例如,在

/etc/ld.so.conf.d
Run Code Online (Sandbox Code Playgroud)

包含您希望加载程序搜索的目录,例如,

/usr/local/libcsfml
Run Code Online (Sandbox Code Playgroud)

进一步阅读: