图书馆提供了几个有益的功能。 在构建大型程序时,尤其是与多个人一起构建时,编译时间可能会增加。 使用库对不经常修改的目标文件进行排序和索引可以显着减少编译时间。
静态库实质上是对象文件的集合(认为是将不同的功能集文件编译成机器代码),这些文件与您使用其编译的程序链接。 如果您不理解CI中的编译步骤,强烈建议您阅读我写的这篇文章。 使用库会将链接程序的多步骤过程(查找,打开,读取,关闭每个文件)变成单个实体,以供链接程序扫描和链接程序。 链接器仍将程序中函数的实例替换为其实际的目标代码。
在C中创建静态库非常容易。 我们将使用带有rc
标志的linux命令行工具ar
创建库,使用ranlib
索引我们的库,并使用带有-c
标志的gcc
将c文件编译或转换为目标代码, -fPIC
发出与位置无关的代码(不是静态库所需,但这是一个好习惯)。


在上面,您可以看到我们正在首先在库中编译所需的C文件。 这可以通过通配符自动实现,但稍后会介绍更多。 接下来,我们使用ar rc
创建包含所有目标文件的库。 然后,我们使用标志-t
运行ar
命令以查看库的内容。 但是,我们还没有完成!
- 素描库综述(v47 beta)文章和视频
- 电子游戏中的好人,坏人和丑陋的图书管理员
- FWS学者:理查德·史塔克(Richard Stark)为蝙蝠而战!
- 在工作中寻找意义:图书馆员每天帮助社区
- 我从杰夫·贝佐斯那里学到的东西:又名:如何将数百万本书带给数十亿人
我们最终必须索引我们的库。 对库建立索引可以使编译器加快其在库中查找符号的速度,并确保这些符号的顺序无关紧要。 符号只是库中使用的函数,变量等。 使用我们的最终命令ranlib ourlib.a
可以为其建立索引。


使用我们的库非常简单。 使用gnu社区编译器gcc
我们可以使用标志-L .
指定非标准库目录。 通常,gcc会在\lib
和\usr\lib
等目录中查找库。 指定我们的当前目录.
允许gcc查找我们制作的新库文件。 我们将进一步需要使用-l wemade
指定我们的库,然后使用-o isupper
创建我们的输出文件,命令如下:
gcc main.c -L . -l wemade -o isupper
尽管编译稍微复杂一点,但是它要快得多,尤其是在处理大文件时。 希望您喜欢有关C中静态库的简短教程。请随时在Twitter上关注我: