C Header 文件和库的分发和链接

Distribution and Linking of C Header Files and Libraries

我是 C 编程(但不是编程)的新手,我正在尝试了解库和 header 文件如何协同工作,尤其是在打包和分发方面。

阅读 this excellent question and its answer 后,我了解到 header 文件充当库的 API,向外界公开功能;并且库本身就是这些功能的实现。

但是我似乎找不到很好的解释的一件事是:header 文件是如何打包到库中或与库一起分发的?

当我执行 #include "mylib.h" 时,链接器如何知道在哪里找到:

  1. header 文件本身,mylib.h
  2. 实现mylib.h中声明的函数的库。

how does the linker know where to find: (1) the header file itself, mylib.h

  • 使用像#include <mylib.h>这样的符号,它在系统定义的include PATH中搜索头文件。
  • 使用#include "mylib.h"这样的符号,它在系统定义的include PATH和当前目录中搜索头文件。

如果头文件存在于其他层次结构中,您可以使用 -I 选项和 gcc.

提供获取头文件的路径

(2) the library implementing mylib.h?

您需要使用 -L 提供库的路径(如果库的非标准路径)和 link 使用 -l 选项的库。

按照惯例,如果(共享)库名为 libmylib.so,您可以使用 -lmylib 到 link 到该目录。

例如,考虑 pow() 函数。

它的原型是在math.h,所以在你的源文件中,你需要添加#include <math.h>来得到函数声明。

然后,在编译(而不是 linking)时,您需要 link 它与 "math" 库一起使用 -lm 获取函数定义。