您需要了解的C静态库

随着我们的问题变得越来越大和越来越复杂,针对它们的解决方案需要进行细分以使其更简单,更容易实现。 在计算机科学中,我们有一个非常有用的工具:建立一个。 简而言之,它是包含特定命令的项的集合,以构建一个独特的程序。 这样,图书馆可帮助我们订购工作,以便我们轻松到达。 机器与我们制作的所有子程序进行交互并针对特定输出进行编译也更加容易。

我们将逐步制作一个C静态库的示例,以解释我们需要什么以及机器将如何处理。

建立一个C静态库

现在开始进行工作,我们将需要将目标文件(.o文件)放入我们的库中。 为此,我们必须在“链接”之前停止C文件的编译过程。

要了解有关此的更多信息,请参阅:

键入gcc main.c会发生什么?
如果您想知道gcc main.c脚本的功能,请继续阅读,因为在这里我将解释… medium.com

您可以通过将GCC命令与-c选项一起使用来停止编译过程。 通配符*将节省同时编译工作目录中所有.c文件的时间:

  $ gcc -c * .c 

这将创建.o文件,这些文件将成为存储在库中的对象。 现在,执行此操作的命令是:

  $ ar -rc libholberton.a * .o 

命令ar用于“归档”,是用于构建库的GNU命令。 它的输出将是一个具有我们给定名称的文件,在此示例中为“ libholberton.a”。 -rc选项是我们放在一起的两个选项; r用于替换较旧的文件,c用于创建新的存档,这就是我们的情况。

是的,现在我们创建我们的库! 但是不要着急,还有重要的一步:为我们的库建立索引。 如果您的系统没有自动执行此操作,则可以使用ranlib命令。

  $ ranlib libholberton.a 

为库建立索引将使编译器可以更快地参考来查找与我们放入库中的目标文件相匹配的符号。 这样,符号的提及顺序将无关紧要。

让您的图书馆为您服务

使用GCC编译文件时,它将首先找到main()函数,因此我们必须创建要编译的main.c文件。 然后我们可以运行命令:

  $ gcc main.c -L。  -lholberton -o主 

关于此命令的注释:

  1. -L选项将指定库的路径,这就是为什么我们在其旁边放置点“。”。 点表示当前目录。
  2. 当我们提到我们的库时,没有“ .a”或“ lib”前缀。
  3. -o选项将创建一个具有所需名称的可执行文件。 在这种情况下主要。

要执行在main.c中指定的任务来执行程序,我们只需简单地执行main,就像我们之前使用-o选项进行调用一样。

  $ ./main 

这样,我们就完成了解释。 库已创建,我们可以自由地对存储在库中的对象执行任何所需的任务,并且我们知道可以使用main.c文件调用该对象。 我们还学习了如何执行该命令并为其命名。 这次是对静态库的解释,但是还有另一种库可以在另一篇文章中进行解释。

敬请期待,学习愉快!