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

Posted

技术标签:

【中文标题】为啥应用程序找不到这个 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 库? - Ubuntu 14.04 【发布时间】:2015-02-13 19:00:57 【问题描述】:

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

libSDL2_image-2.0.so.0

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

编译和安装运行没有错误 make install把库放在这里:
/usr/local/lib/libSDL2_image-2.0.so.0

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

加载共享库时出错: libSDL2_image-2.0.so.0:无法打开共享对象文件:没有这样的文件 或目录

我怎样才能让这个主应用程序读取这个库?

【问题讨论】:

【参考方案1】:

我怎样才能让这个主应用程序读取这个库?

首先,您需要验证应用程序和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。 更全局的方式(影响系统上的所有应用程序)是编辑/etc/ld.so.conf 并添加/usr/local/lib,然后以root 身份运行/sbin/ldconfig

附:在我的 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'

应该这样做。

【讨论】:

非常好,是的,问题出在位 - 32 位应用程序,64 位库。我的编译器无法使用 'gcc -m32' 标志运行,但我至少知道问题所在以及现在如何解决,感谢 Employed Russian!

以上是关于为啥应用程序找不到这个 libSDL2_image-2.0.so.0 库? - Ubuntu 14.04的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 uWSGI 找不到我的 Django 应用程序?

为啥好多东西运行不了。出现“找不到所需的.dll文件?”

为啥这个 pymongo 子文档找不到工作?

为啥这个 pymongo 子文档找不到工作?

为啥 JVM 找不到 Postgresql JDBC 驱动程序?

为啥我找不到 SSL 握手的信任库?