Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144367
  • 博文数量: 26
  • 博客积分: 590
  • 博客等级: 中士
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-19 15:26
文章存档

2012年(10)

2011年(16)

我的朋友

分类: LINUX

2011-10-11 11:50:27

<1> 库文件及头文件使用 
 linux程序开发中经常要使用到头文件和静态库,在linux系统的目录下有专门的目录结构来存放这些文件,在shell文件的PATH变量中有指定的默认搜索路径。
头文件的默认路径为 /include  usr/include 及其子目录,库文件的默认路径为 /lib usr/lib 及其子目录。当我们编写程序的时候需要使用默写库函数的时候,
C语言编译器会自动到这些目录下搜索。当然我们也可以自己制定头文件或者库文件的存放路径,制定头文件用“-I ”制定,制定库文件用“-L”制定。
 具体实例如下:
 cc -c main main.c -I /opt/***  //制定具体的头文件所在的位置  编译器编译的时候会搜索默认路径和指定路径。
 cc -o main mian.o libfool.a -L /opt/****  //指定具体的静态库所在的路径
 由于库文件的名字定义有具体的规则,库名字都是以lib开头然后加上具体的名字,以.开头加上类型(.a静态库 ,.so静态库)。所以上边的指令还可以还成:
 cc -o main mian.o -lfool -L /opt/****  //此语句的含义是:编译连接main程序的时候需要用到某个函数,这个函数在以fool命名的静态库-libfool.a中,
 这个静态库的具体存放位置在/opt/****目录下。
 
<2> 静态库的建立
 假设我们这里有三个C源文件。
 //************bill.c********************//
 #include
 void bill(void)
 {
  printf("this bill function !\n");
 }
 
 //**********fill.c*********************//
 #include
 void fill(void)
 {
  printf("this fill function !\n");
 }
 
 //***********main**********************//
 #include
 int main(void)
 {
  bill();
  exit(0);
 }
 
 //***********fool.h********************//
 void bill(void);
 void fill(void);
 
 首先分别fill.c bill.c两个源文件,在编译的时候要使用命令CC -c 以阻止编译器生成最终的程序,因为这两个C文件都没有main函数,用CC -o指令
 时会报错。
 cc -c fill.c bill.c
 生成fill.o和bill.o文件
 cc -c main.c -I /opt/*** 指定fool.h文件所在目录
 生成main.o文件
 
    此时不使用静态库,简单的编译下: cc -o main mian.o bill.o
 生成main可执行文件 ./main  会有打印信息:this bill function出现。说明我们编译程序成功了。
 下边具体的制作静态库的过程:
 生成fill.o和bill.o后 执行以下命令
 ar cvr libfool.a fill.o bill.o
 会生成libfool.a库
 runlib libfool.a //生成内容表 大部分的系统都不需要一步都可以使用。
 下边就可以使用静态库了
 cc -o main main.o libfool.a -L /opt/****   //指定静态库的目录路径
 或者
 cc -o main main.o -lfool -L /opt/*****     // -lfool 指定使用的静态库为libfool.a -L 指定静态库所在目录 编译器会在静态库中搜索需要的函数
 
阅读(1260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~