为什么应用程序找不到这个 libSDL2_image-2.0.so.0 库? - Ubuntu 14.04

Why cant application find this libSDL2_image-2.0.so.0 library? - Ubuntu 14.04

我有一个依赖这个库的应用程序

libSDL2_image-2.0.so.0

所以我从源代码编译 - 我从 SDL image website

获得
/usr/local/lib/libSDL2_image-2.0.so.0

当我尝试启动主应用程序终端时出错:

error while loading shared libraries:
libSDL2_image-2.0.so.0: cannot open shared object file: No such file or directory

如何让这个主应用程序读取这个库?

How can I get this the main application to read this lib?

首先,您需要验证应用程序和 libSDL2_image-2.0.so.0 是否使用相同的位数构建(例如,两者都是 32 位,或者都是 64 位)。这样做的方法是 运行:

file /path/to/app /usr/local/lib/libSDL2_image-2.0.so.0

这应该产生类似于以下的输出:

file -L /bin/date /lib/x86_64-linux-gnu/libc.so.6
/bin/date:                       ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=1f3196df3d6126ccfa9bcb3faa3dfadf67d1b2bb, stripped
/lib/x86_64-linux-gnu/libc.so.6: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=882ad7aad54790e2fa6ef64ca2e6188f06bf9207, for GNU/Linux 2.6.24, stripped

假设它们是兼容的,有几种方法可以使应用程序使用来自 /usr/local/lib:

的库
  • 最本地化的方法是将 -Wl,-rpath=/usr/local/lib 添加到应用程序 link 行。
  • 更全局的方式(影响系统上的所有应用程序)是编辑 /etc/ld.so.conf 并向其添加 /usr/local/lib,然后 运行 /sbin/ldconfig 作为 root。

P.S。在我的 ubuntu-14.04 系统上 /usr/local/lib 已经 包含在 /etc/ld.so.conf.d/libc.conf 中,所以我预计位数不匹配是您的 实际 问题在这里。

如果应用程序实际上是在 32 位模式下构建的,您还需要在 32 位模式下重建 libSDL2_image-2.0.so.0。像

configure CC='gcc -m32'

应该这样做。