报错: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?
百度有人说,系统的默认搜索依赖库路径为/lib,和/usr/lib,和/usr/local/lib,
Q3,为什么No such file or directory?
find / -name libpcap.so.0.8 无结果
find / -name libpcap.so 发现了/usr/lib64/libpcap.so
待研究,,
Q4,libpcap.so和libpcap.so.0.8的区别
知识点
一、.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存放内容同上。
百度有人说,lib64的库不是架构独立的,lib的库是架构独立的。/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的.