为什么应用程序找不到这个 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
获得
- 编译安装运行没有错误
make install
把图书馆放在这里:
/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'
应该这样做。
我有一个依赖这个库的应用程序
libSDL2_image-2.0.so.0
所以我从源代码编译 - 我从 SDL image website
获得- 编译安装运行没有错误
make install
把图书馆放在这里:
/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'
应该这样做。