C头问题:#include和“未定义引用”
好吧,我一直在尝试使用这个时间最长,我似乎无法让它正常工作。 我有三个文件, main.c
, hello_world.c
和hello_world.h
。 无论出于什么原因,他们似乎没有很好地编译,我真的无法弄清楚为什么……
这是我的源文件。 首先hello_world.c:
#include #include "hello_world.h" int hello_world(void) { printf("Hello, Stack Overflow!\n"); return 0; }
然后hello_world.h,简单:
int hello_world(void);
最后是main.c:
#include "hello_world.h" int main() { hello_world(); return 0; }
当我把它放入GCC时,这就是我得到的:
cc main.c -o main /tmp/ccSRLvFl.o:在函数`main'中: main.c :(。text + 0x5):未定义引用`hello_world' collect2:ld返回1退出状态 make:*** [main]错误1
有人能帮帮我吗? 我真的坚持这个,但我99%肯定这是一个非常简单的修复。
gcc main.c hello_world.c -o main
此外,始终使用标题保护:
#ifndef HELLO_WORLD_H #define HELLO_WORLD_H /* header file contents go here */ #endif /* HELLO_WORLD_H */
您没有在编译中包含hello_world.c。
gcc hello_world.c main.c -o main
您应该将第二个.c文件hello_world.c中编译的目标文件与main.o链接起来
试试这个
cc -c main.c cc -c hello_world.c cc *.o -o hello_world
你没有链接到hello_world.c。
一个简单的方法是运行此编译命令:
cc -o main main.c hello_world.c
更复杂的项目通常使用构建脚本或制作分离编译和链接命令的文件,但上述命令(组合两个步骤)应该适用于小项目。
雅似乎你忘了链接hello_world.c。 我将是gcc hello_world.c main.c -o main。 如果文件数量较少,我们可以使用这种方法,但在较大的项目中,最好使用Make文件或一些编译脚本。