报错:error while loading shared libraries: libpcap.so.0.8: cannot open shared object file: No such file or directory
问题描述:报错找不到的库其实是安装了的,但是仍然报错找不到,
Q1,linux的.so文件是啥?
Linux下的.so文件是动态链接库,其功能和作用类似与windows下.dll文件。
Q2,while loading shared libraries 系统会去哪loading?
百度系统的默认搜索依赖库路径为/usr/local/lib,
Q3,为什么No such file or directory?
find /usr/local/lib/ -name libpcap.so 无结果
find / -name libpcap.so 发现了/usr/lib64/libpcap.so
尝试复制过去,cp /usr/lib64/libpcap.so /usr/local/lib/
问题解决!
结果检验:删了/usr/local/lib/libpcap.so,运行无报错,接着删了执行文件重编译运行也无报错,,,为什么不报错了?
知识拓展
一、.so和.a
.so后缀的文件是linux下的动态链接库。动态函数库在编译的时候没有被编译进目标代码中,程序执行到相关函数时才调用它。由于函数库没有被整合进程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供依赖的库。
.a后缀的文件是linux下的静态链接库。静态函数库在编译的时候被整合进了目标代码里,成为了程序的一部分。
.so库的好处:1、不同的程序可以共享所需要的同一个库的某几个函数。2、执行过程中有需求才调用某一段代码,大大节省系统资源。3、将一些程序升级变得简单,升级.so库即可升级程序。
二、6个文件目录的区别:/lib, /usr/lib, /usr/local/lib, /lib64, /usr/lib64, /usr/local/lib64
/lib存放最基本的用于启动系统和执行root文件系统的命令(/bin和/sbin中的二进制文件)的动态库。
/usr/lib存放/usr/bin和/usr/sbin中二进制文件的库
/usr/local/lib存放用于用户程序或安装包的库。
lib64感觉同上。但是目录下的文件并不一样,待研究,,