我知道我有库,但可执行文件找不到它。如果我知道它在哪里搜索,我可以创建一个符号链接,它希望找到 lib。
$ ~/Apps/simutrans/simutrans
/home/dan/Apps/simutrans/simutrans: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file: No such file or directory
$ locate libbz2
...
/lib/x86_64-linux-gnu/libbz2.so.1
/lib/x86_64-linux-gnu/libbz2.so.1.0
/lib/x86_64-linux-gnu/libbz2.so.1.0.4
/usr/lib/x86_64-linux-gnu/libbz2.a
/usr/lib/x86_64-linux-gnu/libbz2.so
...
Run Code Online (Sandbox Code Playgroud)
显然,可执行文件不是/etc/ld.so.conf*用来查找库的;如果是,那么它会找到lib:
$ cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)
使用 来检查可执行文件readelf,如系统将在哪里搜索动态库中所述?, 不显示RUNPATH在需要找到库时会显示的条目。
假设您的程序以当前用户(没有 setuid 等)运行,您可以使用它strace来获取此信息,例如,
strace -o foo.out ~/Apps/simutrans/simutrans
Run Code Online (Sandbox Code Playgroud)
并在输出文件中查找open调用。
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |