静态库的基本使用

一、 静态库的编译
1. 编译过程 (*.a) a是achieve的缩写
1.1 编译成目标文件
-static 可选
gcc -c -static 代码文件.c
1.2 归档成静态库
ar工具 (常用-r -t选项)
ar -r 静态文件名被归档的文件名
ar -r add.aadd.o
nm工具(查看函数符号表)
nm 静态库或动态库或目标文件或执行文件
1.3 使用静态库
gcc 代码文件 静态库
小例子:
使用静态库完成如下程序
输入一个菱形半径,打印菱形
输入整型封装成IOTool
菱形打印封装成Graphic
计划:
1. 实现输入
2. 实现菱形
3. 编译静态库
4. 调用静态库

1)input.c
#include <stdio.h>


int inputInt(const char* info){
   printf("please input the radiu of diamond\n");
   int r;
   scanf("%d",&r);
   return r;

}

2)diamond.c
#include <stdio.h>


int diamond(int r){

   int x,y;
   for(y = 0 ; y <= 2*r ; ++y){
      for(x = 0 ; x <= 2*r ; ++x){
         if(y == x+r || y == x-r || y == -x+r || y == -x+3*r){
             printf("*");
         }else{
             printf(" ");
         }
      }
      printf("\n");
   }
}

3)main.c
#include <stdio.h>


int main(){
   int r = inputInt("asda");
   diamond(r);

}

效果图:
静态库的基本使用


编译执行方式:
第一种:gcc main.c input.c diamond.c -omain
第二种:作为静态库进行编译执行
gcc -static -c input.c    //产生input.o文件
gcc -static -c diamond.c
ar -r ku.a input.o diamond.o   //利用input.o 和diamond.o文件产生ku.a 文件
gcc main.c ku.a -omain   
./main     //执行main程序

把静态库作为代码的一部分来编译
 
总结:
1. 什么是库?
函数等代码封装的二进制已经编译的归档文件
2. ar归档工具
3. 采用库的方式管理代码优点:
容易组织代码
复用
保护代码版权
4. 静态库的“静态”的含义:
编译好的程序运行的时候不依赖库
库作为程序的一部分编译连接
5. 静态库的本质
就是目标文件的集合(归档)
6. -static可选
 
2. 库的规范与约定
库命名规则:
lib库名.a.主版本号.副版本号.批号
一般就写“lib库名.a”就行了。
ar -r libdemo2.a iotool.o graphic.o
库的使用规则
-l库名
-L库所在的目录
gcc main.c -o main -l demo2 -L.


------------------------------------静态库的基本使用小结---------------------------------
1、静态库的生成与使用
生成:gcc -static -c input.c
           gcc -static -c diamond.c
           ar -r ku.a input.o diamond.o
使用:gcc main.c ku.a -o main
执行:./main

2、其他的常见命令
ar -r ku.a ku1.o ku2.o  //利用ku1.o  ku2.o 生成归档文件ku.a
ar -t ku.a  //查看归档文件ku.a 的内容
ar -p ku.a  //产看归档文件ku.a 的具体内容

同时还应注意以下写法:
gcc main.c input.c diamond.c -omain //将main.c input.c diamond.c 一起编译生成main程序
          






静态库的基本使用

上一篇:【Sesame】导出已经存在的三元组数据


下一篇:iOS第三方开源库的吐槽和备忘