这真的是一个新手问题。我正在学习C,我不明白如何联系在一起 不同的文件。
我有像
这样的标题/* file2.h */
int increment(int x);
和一个C文件
/* file2.c */
#include "file2.h"
int increment(int x)
{
return x+1;
}
现在我想在file1.c
中加入标题,以便使用函数increment
。
根据我的理解,我必须做一些事情:
/* file1.c*/
#include "file2.h"
int main()
{
int y = increment(1);
return 0;
}
但是当我尝试编译整个事情时,使用
gcc -o program file1.c
我收到类似
的错误消息/tmp/ccDdiWyO.o: In function `main':
file1.c:(.text+0xe): undefined reference to `increment'
collect2: ld returned 1 exit status
但是,如果我还包括file2.c
/* file1.c*/
#include "file2.h"
#include "file2.c" /* <--- here it is! */
int main()
{
int y = increment(1);
return 0;
}
一切都按预期工作。
但是,如果我只理解头文件(只包含声明),则必须包括在内。那么如何通知gcc
increment
中声明的函数file2.h
的定义是file2.c
?
答案 0 :(得分:7)
最简单的方法是直接编译它们:
$ gcc -o program file1.c file2.c
但是对于更复杂的系统,您可能希望分步进行。这是一个简单的命令行配方:
$ gcc -c file1.c
$ gcc -c file2.c
$ gcc -o program file1.o file2.o
对于像这样复杂的事情,更好的方法是使用make。
除了您的具体问题,您为什么使用GCC?您可以使用clang并获得更好的错误消息,更快的编译,并感觉您将来的生活!
答案 1 :(得分:2)
gcc -o program file2.c file1.c
这将编译file1.c和file2.c并将它们链接在一起。