windows静态库文件扩展名.lib 动态库文件扩展名.dll
linux 静态库.a 动态库.so
都是将函数封装在一起编译后供自己或他人调用,好处是编译后的库文件看不带源代码,可以保密
linux库文件一般存在 /lib 和/usr/lib 64位下也有可能存在 /usr/lib64 下
linux库有两种 一种静态库lib**.a 一种共享库lib**.so
lib**.a 静态库 => 链接阶段 => 复制一份到 可执行程序内部
lib**.so 共享库 => 链接阶段 => 标记库的位置然后使用的时候调用
静态库是多个.o文件打包
ar命令 将所有的.o文件打包成静态库
c是创建库 v是详细过程
静态库创建
先写好函数文件,用gcc -c 加函数文件 编译成.o文件 然后用ar crv libfoo.a +文件名.o+文件名.o命令将所有的.o 文件打包到libfoo.a 中,将所有的函数声明写进一个头文件中,将头文件和打包好的lib**.a 文件放进同一个文件夹里,写进一个main函数,然后编译链接 gcc -o main main.c -L.(接当前文件夹) -l(链接哪个**库文件) foo
创建共享库:
生成.o以后,gcc -shared -fPIC -o libfoo.so min.o max.o
需要把生成的libfoo.so共享库移动到 /usr/lib 位置 sudo mv libfoo.so /usr/lib
然后再gcc -o main main.c -lfoo 直接使用
静态库和动态库的区别: 1.静态库在连接时将所用到的函数包含到最终生成的可执行程序中;共享库不会被包含到可执行文件中,只做标记,在运行程序才动态加载,所以共享库体积小