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
与任何其他函数一样处理,只是它在作为入口点的最终可执行文件中具有特殊含义。
我不明白我应该如何用 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
与任何其他函数一样处理,只是它在作为入口点的最终可执行文件中具有特殊含义。