C如何使用具有多个头树的库

C how to use library with multiple header tree

我不明白我应该如何用 gcc 编译以下 .c 和库。

示例:

文件:"commons.h""commons.c"(.c 定义函数等...)

文件:"level1.h""level1.c"level1.c 包括 "commons.h"

文件:"level2.h""level2.c"level2.c 包括 "commons.h""level1.h"

我尝试了这个并得到了 "undefined reference to x"(其中 x 是 level1 中的一个函数):

gcc commons.c -c -o commons.o    (OK)
gcc level1.c -c -o level1.o      (OK)
gcc level2.c -o level2.o   (error, undefined reference to x)

我希望执行level2,我只执行这个

我应该如何编译?哪个顺序? (命令行示例将帮助我理解)

您的最后一行还应使用 -c 标志,以便将 level2.c 编译为目标文件 level2.o

之后目标文件应该被 linked 以创建可执行文件,这是通过

完成的
gcc common.o level1.o level2.o -o my_executable

或者,您可以直接将所有源文件提供给 gcc 而无需 -c 标志,在这种情况下,它将立即执行所有编译和 linking 步骤:

gcc common.c level1.c level2.c -o my_executable

你的错误是当前造成的,因为你正在指示 gcc 没有 -c 选项编译和 link 源文件 level2.c 单独,但当然它无法 link 单独编辑,因为它缺少来自其他源文件的符号。

level2.c 包含 main 这一事实并没有改变这一点。 main 与任何其他函数一样处理,只是它在作为入口点的最终可执行文件中具有特殊含义。