未完成的研究

报错: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感觉同上。但是目录下的文件并不一样,待研究,,

猜你喜欢

转载自www.cnblogs.com/pinkbin/p/10967953.html