好吧,我一直在尝试使用它的时间最长,我似乎无法让它正常工作。我有三个文件,main.c
,hello_world.c
和hello_world.h
。无论出于何种原因,他们似乎没有很好地编译,我真的无法弄清楚为什么......
这是我的源文件。首先是hello_world.c:
#include <stdio.h>
#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: In function `main': main.c:(.text+0x5): undefined reference to `hello_world' collect2: ld returned 1 exit status make: *** [main] Error 1
有人能帮帮我吗?我真的坚持这个,但我99%肯定这是一个非常简单的修复。
答案 0 :(得分:38)
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 */
答案 1 :(得分:8)
您未在编译中包含hello_world.c。
gcc hello_world.c main.c -o main
答案 2 :(得分:5)
您没有链接到hello_world.c。
执行此操作的简单方法是运行此编译命令:
cc -o main main.c hello_world.c
更复杂的项目通常使用构建脚本或制作分隔编译和链接命令的文件,但上述命令(结合两个步骤)对小项目应该没问题。
答案 3 :(得分:4)
您应该将第二个.c文件hello_world.c中编译的目标文件与您的main.o链接
试试这个
cc -c main.c
cc -c hello_world.c
cc *.o -o hello_world
答案 4 :(得分:1)
雅似乎你忘了链接hello_world.c。 我将是gcc hello_world.c main.c -o main。如果文件数量较少,我们可以使用此方法,但在较大的项目中,最好使用Make文件或某些编译脚本。