1.什么是库
库在Linux中是一个二进制文件,它是由.cpp文件(不包含卖弄函数)编译而来,其他程序如果想要使用该源文件中的函数时,只需在编译生成可执行程序时,链接上该源文件生成的库文件即可。库中存储的是二进制文件,不容易被窃取只是产权,做到了保护作用给。
库在Linux中分为两类:静态库和动态库
Windows:***.lib(静态库)。***.dll(动态库)。
Linux:***.a(静态库)。***.so(动态库)
2.静态库及其制作
概念:将一个***.cpp的文件编译生成一个lib***.a的二进制文件,当你需要使用该源文件中的函数时,只需要链接该库即可。后期可以直接调用
静态体现:在使用g++编译程序时,会将你的文件和库最终生成一个可执行程序(把静态库也放到可执行程序中),每个可执行程序都有一个静态库,体积较大,但是,执行效率高
2.1准备程序
add.h,add.cpp,.main.cpp
2.2编译生成静态库
gcc -c ***.c -o ***,o //只编译不链接生成二进制文件
ar -crs lib***.a ***.o //编译生成静态库,.a文件依赖于.o文件
如果有多个.o文件共同编译生成静态库: ar -crs lib***.a ***.o ***.o xxx.o ...
ar:用于生成静态库的指令
c;用于创建静态库
r:将文件插入或者替换静态库中同名文件
s:重置静态库索引
2.3使用静态库
gcc main.cpp -L 库的路径 -l库名 -I(i) 头文件的名字
点(.)表示在当前路径
多路径经行编译
3.动态库及其制作
概念:将一个***.cpp的文件编译生成一个lib***.so的二进制文件,当你需要使用该源文件中的函数时,只需要链接该库即可。后期可以直接调用
静态体现:在使用g++编译程序时,会将你的源文件和库中相关函数的索引表一起生成一个可执行程序,每个可执行程序只拥有函数的索引表,当程序执行到对应函数时,会根据索引表,动态寻找相关库所在位置进行调用,体积较小,执行效率较低,但是可以多个程序共享同一个动态库,所以,动态库也叫共享库。
3.1准备程序
add.h,add.cpp,.main.cpp
3.2编译生成动态库
g++ -fpic -c ***.cpp -o ***.o //编译生成二进制文件
g++ -shared ***.o -o lib***.so //依赖于二进制文件生成一个动态库
上述两个指令可以合成一个指令
g++ -fpic -shared ***.cpp -o lib***.so
3.3使用动态库
3.4以上错误的解决方式
方式1:更改路径宏
export LD_LIBRARY_PATH=库的路径
方法2:将自己的动态库放入到系统的库函数目录中(/lib64 /usr/lib64)