C Header 文件和库的分发和链接
Distribution and Linking of C Header Files and Libraries
我是 C 编程(但不是编程)的新手,我正在尝试了解库和 header 文件如何协同工作,尤其是在打包和分发方面。
阅读 this excellent question and its answer 后,我了解到 header 文件充当库的 API,向外界公开功能;并且库本身就是这些功能的实现。
但是我似乎找不到很好的解释的一件事是:header 文件是如何打包到库中或与库一起分发的?
- 库及其 header 是否打包到存档文件(zip、tarball 等)中?
- 是否将 header 编译成库并与它们一起分发?
当我执行 #include "mylib.h"
时,链接器如何知道在哪里找到:
- header 文件本身,
mylib.h
- 实现
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
获取函数定义。
我是 C 编程(但不是编程)的新手,我正在尝试了解库和 header 文件如何协同工作,尤其是在打包和分发方面。
阅读 this excellent question and its answer 后,我了解到 header 文件充当库的 API,向外界公开功能;并且库本身就是这些功能的实现。
但是我似乎找不到很好的解释的一件事是:header 文件是如何打包到库中或与库一起分发的?
- 库及其 header 是否打包到存档文件(zip、tarball 等)中?
- 是否将 header 编译成库并与它们一起分发?
当我执行 #include "mylib.h"
时,链接器如何知道在哪里找到:
- header 文件本身,
mylib.h
- 实现
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
获取函数定义。