gpt4 book ai didi

c - gcc 链接器如何在包含文件中工作

转载 作者:行者123 更新时间:2023-12-04 09:37:42 26 4
gpt4 key购买 nike

这真是一个新手问题。我正在学习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 file2.h中声明的函数increment的定义在file2.c中?

最佳答案

最简单的方法是直接编译它们:

$ 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并获得更好的错误消息、更快的编译速度,感觉就像生活在未来!

关于c - gcc 链接器如何在包含文件中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com