为啥应用程序找不到这个 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的主要内容,如果未能解决你的问题,请参考以下文章