我是C编程的新手(但不是编程),我正在尝试理解库和头文件如何协同工作,特别是在打包和分发方面。
阅读this excellent question and its answer后,我理解头文件充当库的API,向外界展示功能;并且库本身就是这些功能的实现。
然而,我似乎无法找到一个很好的解释的一件事是:如何将头文件打包到库中或与库一起分发?
当我做#include "mylib.h"
时,链接器如何知道在哪里找到:
mylib.h
mylib.h
中声明的函数的库。答案 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
来获取函数定义。