问题:运行错误
ubuntu@VM-16-9-ubuntu:~/pro/main$ ./main
./main: error while loading shared libraries: libelasticlient.so.2: cannot open shared object file: No such file or directory
这个错误表明 libelasticlient.so.2 动态库 在运行时找不到,尽管编译时可能已经正确链接了 ibelasticlient。
1. 动态库不存在?
ubuntu@VM-16-9-ubuntu:~/pro/main$ find /usr -name "libelasticlient*" 2>/dev/null
/usr/local/lib/libelasticlient.so
/usr/local/lib/libelasticlient.so.2
/usr/local/lib/libelasticlient.so.2.1.0
由上面的查询结果可知动态库文件是存在的。
2. 链接的路径不知道?
程序链接的动态库的地址由 LD_LIBRARY_PATH环境变量控制。
使用下面的指令查看环境变量:
echo $LD_LIBRARY_PATH
运行 echo $LD_LIBRARY_PATH 返回空。
LD_LIBRARY_PATH 可能从未被设置过(默认情况下为空)。
动态库路径可能通过其他方式指定(如 /etc/ld.so.conf、-Wl、-rpath 编译选项)。
查看/etc/ld.so.conf 显示为让查看 /etc/ld.so.conf.d 目录下的文件。
ubuntu@VM-16-9-ubuntu:~/pro/main$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
ubuntu@VM-16-9-ubuntu:~/pro/main$ cat /etc/ld.so.conf.d/libc.conf
libc default configuration
/usr/local/lib
表明是有这个路径的。
3. 动态库缓存未更新?
/etc/ld.so.conf.d/libc.conf 已经正确配置了 /usr/local/lib,且动态库文件(libelasticient.so*)确实存在于该路径下,但运行时仍报错 “找不到动态库”。这可能是由于动态库缓存未更新或程序运行时的库搜索路径问题导致的。
使用下面的指令查看可执行动态库的依赖库的情况。
ubuntu@VM-16-9-ubuntu:~/pro/main$ ldd /usr/local/lib/libelasticlient.so
linux-vdso.so.1 (0x00007ffd7c9a1000)
libjsoncpp.so.19 => not found
libcpr.so.1 => not found
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa986606000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa9865eb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa9863f9000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa9862aa000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa986815000)
libelasticlient.so 依赖的两个库 libjsoncpp.so.19 和 libcpr.so.1 未被找到(not found),而其他依赖(如 libstdc++.so.6、libc.so.6)已正确加载。
/usr/local/lib/ 下存在 libjsoncpp.so.19(从 ls 输出可以看到),但 ldd 仍然报错。
可能原因:
- 动态库缓存未更新(
ldconfig未扫描/usr/local/lib)。
使用下面的指令更新动态库缓存
sudo ldconfig
然后再查看:
ubuntu@VM-16-9-ubuntu:~/pro/main$ ldd /usr/local/lib/libelasticlient.so
linux-vdso.so.1 (0x00007ffd6ed77000)
libjsoncpp.so.19 => /usr/local/lib/libjsoncpp.so.19 (0x00007f735ccfe000)
libcpr.so.1 => /usr/local/lib/libcpr.so.1 (0x00007f735cce2000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f735cb00000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f735cae5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f735c8f3000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f735c7a4000)
libcurl.so => /usr/local/lib/libcurl.so (0x00007f735c744000)
/lib64/ld-linux-x86-64.so.2 (0x00007f735cd64000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f735c721000)
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f735c68e000)
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f735c3b7000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f735c39b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f735c393000)
问题解决了。

2万+

被折叠的 条评论
为什么被折叠?



