我曾经遇到的bug也许正是你正在遇到的,希望可以帮到你。
今天在运行criu程序时候,遇到了题目的问题:
$ ./criu/criu
./criu/criu: error while loading shared libraries: libnet.so.1: cannot open shared object file: No such file or directory
原因
这种运行程序时找不到需要的动态库。基本是由于环境设置有问题。
我电脑上centos7 yum 源上没有libnet库,所以是从github上下载libnet源码并编译的。导致环境没有配置。
可以通过ldd命令查看criu动态库的依赖关系
$ ldd criu/criu
libbsd.so.0 => /lib64/libbsd.so.0 (0x000000ffeb830000)
librt.so.1 => /lib64/librt.so.1 (0x000000ffeb814000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000ffeb7dc000)
libprotobuf-c.so.1 => /lib64/libprotobuf-c.so.1 (0x000000ffeb7c0000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000ffeb7ac000)
libnl-3.so.200 => /lib64/libnl-3.so.200 (0x000000ffeb780000)
libnet.so.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x000000ffeb598000)
/lib64/ld.so.1 (0x000000aaaaaa8000)
libm.so.6 => /lib64/libm.so.6 (0x000000ffeb498000)
其中你会发现 ” libnet.so.1 => not found “ 。
解决办法
1、查找libnet.so库的位置
$ cd /usr/
$ find -name libnet.so*
find: ‘./lib/firewalld’: 权限不够
./lib64/libnet.so.1.7.0
./lib64/libnet.so
find: ‘./share/polkit-1/rules.d’: 权限不够
2、软链接文件
可以看到libnet库的真正位置在 /usr/lib64/libnet.so.1.7.0 。然后把这个文件软链接到/lib64目录下,并命名为libnet.so.1就可以了
$ sudo ln -s /usr/lib64/libnet.so.1.7.0 /lib64/libnet.so.1
此后你可以再次使用ldd 命令查看动态库的链接情况
$ ldd criu/criu
...
libnet.so.1 => /lib64/libnet.so.1 (0x000000ffef410000)
...