c 静态库,c++静态库
有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如文件就是这样一个库,我们在不同的程序中都会用到文件中的库函数(例如printf),也会用到文件中的变量(例如以后要讲到的包围变量)。本节介绍怎么创建这样一个库。
我们继续用stack.c的例子。为了便于理解,我们把stack.c拆成四个程序文件(虽然实际上没太大必要),把主网站改得简单一些,头文件stack.h不变,本节用到的代码如下所示:
/* stack.c */
字符堆栈[512];
int top=-1;
/* push.c */
外部字符堆栈[512];
外部内部顶部
无效推送(字符c)
stack[top]=c;
}
/* pop.c */
外部字符堆栈[512];
外部内部顶部
字符弹出(无效)
返回堆栈【顶-】;
}
/* is_empty.c */
外部内部顶部
(同Internationalorganizations)国际组织是_empty(无效)
return top==-1;
}
/* stack.h */
#ifndef STACK_H
#定义堆栈_H
外部空的推送(char);
外部字符弹出(作废);
外部内部是_ empty(void);
#endif
/* main.c */
#包含标准视频
#include stack.h
int main(void)
push( a );
返回0;
}
这些文件的目录结构是:
$树
- main.c
`-堆栈
- is_empty.c
-流行音乐
- push.c
- stack.c
`- stack.h
一个目录,6个文件
我们把stack.c、push.c、pop.c、is_empty.c编译成目标文件:
$ gcc-c栈/栈。c栈/推。c栈/pop。c栈/is _ empty。c
然后打包成一个静态库libstack.a:
$ ar RS库堆栈。一摞。o推。哦,爸爸。o是_空。o
ar:创建库栈. a
库文件名都是以解放运动开头的,静态库以a作为后缀,表示存档。阿肯色州命令类似于水手命令,起一个打包的作用,但是把目标文件打包成静态库只能用阿肯色州命令而不能用水手命令。选项r表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包中已有同名文件就替换成新的100 .s是专用于生成静态库的,表示为静态库创建索引,这个索引被链接器使用兰利布命令也可以为静态库创建索引,以上命令等价于:
$ ar r库堆栈。一摞。o推。哦,爸爸。o是_空。o
$ ranlib libstack.a
然后我们把库栈。a和主网站编译链接在一起:
海湾合作委员会主要成员。c-l。-lstack-I stack-o main
-我选项告诉编译器去哪里找需要的库文件,-我。表示在当前目录找2008-lstack告诉编译器要链接libstack库,-我选项告诉编译器去哪里找头文件。注意,即使库文件就在当前目录,编译器默认也不会去找的,所以-我。选项不能少。编译器默认会找的目录可以用-打印-搜索-目录选项查看:
海湾合作委员会打印-搜索-目录
安装:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/
程序:=/usr/lib/gcc/i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/:
库:=/usr/lib/gcc/i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/http://www。cn博客。com/http://www。cn博客。com/i486-Linux-GNU/lib/i486-Lin./lib/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/http://www。cn博客。com/./i486-Linux-GNU/4。3 .2/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/http://www。cn博客。com/http://www。cn博客。com/lib/:/lib/i486-Linux-GNU/4。3 .2/:/lib/./lib/:/usr/lib/i486-Linux-GNU/4。3 .2/:/usr/lib/./lib/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/http://www。cn博客。com/http://www。cn博客。com/i486-Linux-GNU/lib/:/usr/lib/gcc/i486-Linux-GNU/4。3 .2/http://www。cn博客。com/./:/lib/:/usr/lib/
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。