因此,您已经找到了如何用C编写程序和函数。下一步的逻辑就是将这些函数放在一起,对吗? 好吧,如果您现在就尝试这样做,那么您将花费无数的时间为闪亮的新项目编写和重写函数。
图书馆是从哪里来的。
库是一个文件,在一个方便的小程序包中包含项目功能的目标文件版本。 而不是这样做:
您可以轻松地创建一个库,以缩短编译过程中链接文件所需的时间,并减少您键入的字符数-这意味着您不太可能犯错误,而不必在命令中进行搜索,或更糟糕的是,必须重新重写整个过程。
虽然C有两种不同类型的库(静态库和动态库/共享库),但本文将探讨这两种库之一-静态库。
“但是头文件就足够了!”您说。 “我可以在标头中引用我的所有函数,然后从那里链接!”
但是,如果您的程序具有五十,一百, 数百个功能,会发生什么情况?
图书馆。
在拥有数百个文件的地方,现在只有一个(或可能是两个或三个)库。
库非常容易创建。 主要步骤是编译,归档和索引,然后是程序的最终编译。
汇编,pt 1
为了创建函数库,首先我们需要一个充满它们的文件夹。
jack @ ubuntu:〜/ 0x08-static_libraries $ ls * .c
0-isupper.c 0-strcat.c 1-isdigit.c 1-strncat.c 2-strlen.c 3-islower.c 3-strcmp.c 4-isalpha.c 5-strstr.c 9-strcpy.c _putchar.c
0-存储器组100-中心1-存储器1 2-存储器2-存储器3 2-计算机3-存储器3-存储器4-存储器6
然后,我们使用-c标志运行gcc。
gcc -c * .c
您会注意到gcc输出的文件具有扩展名.o,它表示对象或机器代码文件。 这些是我们创建库所需的文件。 尽管您可以在编译中包含单个目标文件,但我们正在查看的文件夹中包含大量这些文件,因此创建包含这些功能的库会容易得多。
存档
ar(或“ archive”)命令是我们用来创建库的命令。 通过使用标志-r和-c,我们告诉存档器将库中的任何旧对象文件替换为它们的较新版本,并创建该库(如果不存在)。
ar -rc libmylib.a * .o
为了使事情更快(并且更不容易出错),您可以使用* .o来收集当前目录中的所有.o文件。
索引编制
索引组织一个库来完成两件事:加速符号查找,并确保符号顺序不会影响编译。 我们可以使用ar命令的-s标志,或使用ranlib命令来为我们的档案建立索引。
ar -s libmylib.aranlib libmylib.a
编译点 2
要在程序中使用我们的库,我们只需要使用gcc将其包含在最终编译中即可。
gcc main.c -L。 lmylib
-L标志告诉gcc查找目录-在这里,我们已使用’。’表示当前工作目录。
您会注意到文件名的格式很奇怪。 当您使用“ l”后跟库名,并删除前缀“ lib”和扩展名“ .a”时,gcc将在搜索时自动将删除的部分重新添加回去。 重要的是要注意,动态库优先于静态库,因此,如果您有一个与静态库同名的动态库,则动态库将是其中的文件。
现在,在控制台的标准输入中键入nm libmylib.a您显示库中的内容。 ar -t libmylib.a还将显示相同的文件。
我希望您对C语言中的静态库有所了解,以及为什么它们是成为任何程序员的必备工具。