一、基本概念
1.1什么是库?
在Windows和Linux两大操作系统中都存在着库。实际上是一种可以执行代码的二进制形式,由于操作系统不同,因此两者的二进制是不兼容的。windows系统是不开源的所以有些库是不可见的,Linux系统是开源可见的,讨论Linux系统下的库。
1.2库分了哪几种?
在Linux下库可分为:静态库和动态库。
静态库的代码在编译的过程中已经被载入可执行程序中,因此代码量有时候会很大,编译时间有可能会较长。
动态库的代码是在可执行程序运行时才需去载入内存的,在编译阶段只是引用,因此代码量会相对较少。
1.3怎么在Linux系统下生成库
首先,在Linux下通过ls /lib指令可以看到动态库和静态库的文件。静态库是以.a为后缀,动态库是以.so后缀。
静态库的生成的两个步骤:
step1、先把源文件编译生成.o。
step2、通过ar指令对目标.o文件进行转换成.a,成为静态库。
动态库是通过gcc加上特定的参数编译产生。
gcc --shared -fPIC -o +生成动态库的名称.so + 目标.o文件
一般情况下库的命名是以lib+文件名+后缀形式。
1.4一个可执行程序依赖什么库
ldd命令可以查看一个可执行程序文件的共享库。
由上图可知test可执行程序文件依赖6个动态库执行这个文件
二、创建好的库如何去使用
gcc或g++时需要加上-L选项这个告诉编译器库文件位于的路径,-l要引用的库文件的名称。
如果运行时报错,原来是找不到动态库文件mytest.so。程序在运行时,会在/usr/lib和/lib等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提示类似上述错误而终止程序运行。我们将文件 mytest.so复制到目录/usr/lib中,再试试。结果成功了!这也进一步说明了动态库在程序运行时是需要的。