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

时间:2015-07-15 09:30:50

标签: c linker shared-libraries static-libraries header-files

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

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

然而,我似乎无法找到一个很好的解释的一件事是:如何将头文件打包到库中或与库一起分发?

  • libs及其标题是否打包成档案(zip,tarball等)?
  • 标题是否编译成lib并与它们一起分发?

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

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

1 个答案:

答案 0 :(得分:2)

  

链接器如何知道在哪里找到:(1)头文件本身,mylib.h

  • 使用#include <mylib.h>之类的符号,它会搜索系统定义的包含PATH的头文件。
  • 使用#include "mylib.h"之类的符号,它会搜索系统定义的包含PATH和当前目录中的头文件。

如果头文件存在于某个其他层次结构中,您可以提供获取带有-I gcc选项的头文件的路径。

  

(2)实现mylib.h的库?

您需要使用-L(如果是库的非标准路径)提供库的路径,并使用-l选项链接库。

根据惯例,如果(共享)库名为libmylib.so,则可以使用-lmylib链接到该目录。

例如,考虑pow()函数。

它是math.h中的原型,因此在源文件中,您需要添加#include <math.h>来获取函数声明。

然后,在编译(而不是链接)时,你需要将它与&#34; math&#34;库使用-lm来获取函数定义。

相关问题