C头问题:#include和“未定义引用”

好吧,我一直在尝试使用这个时间最长,我似乎无法让它正常工作。 我有三个文件, main.chello_world.chello_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文件或一些编译脚本。