我知道这个问题并不是很新,但似乎我自己无法解决我的问题。
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)
哪一个是告诉ld
正确路径的正确方法?
答案1
如果您的库不在标准路径上,那么您需要将它们添加到路径或将非标准路径添加到 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<Your_non-Standard_path>
完成上述任何一项操作后,您需要通过执行以下命令来更新动态链接器运行时绑定:
sudo ldconfig
更新:
您可以通过将上述export
行写入启动文件之一(例如 ~/.bashrc)来使更改永久生效或者如果底层库不与任何其他库冲突,则放入标准库路径之一(例如/lib、/usr/lib)
答案2
LD_LIBRARY_PATH
适合短期测试,但由于只有一个多变的,当您可能有多个带有自定义库的应用程序时,使用起来很尴尬。
Debian/Ubuntu 的常用方法是将其添加到加载器的配置中,例如,在
/etc/ld.so.conf.d
包含您希望加载程序在其中搜索的目录,例如,
/usr/local/libcsfml
进一步阅读:
答案3
这看起来好像有问题的二进制文件是由您编译的。
所以有些库找不到的问题由你负责。
如果这些库在您的系统上可用,它们似乎位于非标准目录位置。
用于-R directory
最终编译器调用以告诉链接器directory
库所在的位置。不止一个-R directory
选项是可能的。
请注意,当您使用时gcc
,您可能需要使用-Wl,-R
而不是-R
。