C 我不知道';我不知道如何链接多个文件
我正在学习如何使用头文件,在链接这3个文件时遇到了一个问题: f、 c: f、 h: 主要条款c:C 我不知道';我不知道如何链接多个文件,c,C,我正在学习如何使用头文件,在链接这3个文件时遇到了一个问题: f、 c: f、 h: 主要条款c: #include <stdio.h> #include "f.h" int main (void) { printf("%d\n", getfavoritenumber()); return 0; } 但是如果我将f.c文件与gcc main.c f.c-o f一起包含进来,它就可以
#include <stdio.h>
#include "f.h"
int main (void)
{
printf("%d\n", getfavoritenumber());
return 0;
}
但是如果我将f.c
文件与gcc main.c f.c-o f
一起包含进来,它就可以工作了
所以,在编译时,我应该包括我在项目中使用的每个C文件,还是我遗漏了什么?因为将每个文件添加到
gcc
中非常烦人。当您有多个源文件一起构成一个可执行文件时,必须对每个源文件进行编译,然后链接在一起。这是通过在您发现的编译器被调用时指定每个源文件来完成的
还请注意,您可以像以前一样在一个步骤中完成编译和链接,也可以按如下方式将它们分开:
gcc -c main.c
gcc -c f.c
gcc -o f main.o f.o
管理多个源文件及其依赖关系是使用makefile发挥作用的地方。当您有多个源文件一起构成可执行文件时,必须对每个源文件进行编译,然后链接在一起。这是通过在您发现的编译器被调用时指定每个源文件来完成的 还请注意,您可以像以前一样在一个步骤中完成编译和链接,也可以按如下方式将它们分开:
gcc -c main.c
gcc -c f.c
gcc -o f main.o f.o
管理多个源文件及其依赖关系是使用makefile发挥作用的地方。您需要了解从c源代码到可运行二进制代码有三个阶段。对于蚀刻和每个文件,除头文件或.h文件外,必须遵循此阶段
gcc-S-o source.S source.c
gcc-c source.s-o source.o
int main()
。这是我们可以在操作系统上运行的文件。gcc-o OutputFile source1.o source2.o source3.o……
/OutputFile
运行程序。可以避免生成部件文件,而直接生成对象文件
是的,你必须在你的项目中包含所有要编译的文件。您可以使用automake或linux shell脚本等自动化工具来完成这项工作。您需要了解从c源代码到可运行二进制代码有三个阶段。对于蚀刻和每个文件,除头文件或.h文件外,必须遵循此阶段
gcc-S-o source.S source.c
gcc-c source.s-o source.o
int main()
。这是我们可以在操作系统上运行的文件。gcc-o OutputFile source1.o source2.o source3.o……
/OutputFile
运行程序。可以避免生成部件文件,而直接生成对象文件
是的,你必须在你的项目中包含所有要编译的文件。您可以使用automake或linux shell脚本等自动化工具来完成此工作。您可能需要查找
make
和makefile等命令。或其他项目/构建系统。这样的系统不仅可以为您处理这些问题,还可以处理系统配置和查找库之类的问题,以及处理依赖项检查,这样您就不需要重建尚未修改的源文件。您可以执行gcc*.c
来编译目录中的所有.c文件。您不需要在命令行中提供每个c文件,除非您使用-c选项gcc-c foo.c
单独编译它们,然后链接所有编译的c对象将文件放入一个可执行文件gcc foo.o bar.o-o foobar
。请注意,在不使用-c进行编译时,需要提供main()function@cigien应被接受为解决方案。这是否回答了您的问题?您可能需要查找像make
和makefile这样的命令。或其他项目/构建系统。这样的系统不仅可以为您处理这些问题,还可以处理系统配置和查找库之类的问题,以及处理依赖项检查,这样您就不需要重建尚未修改的源文件。您可以执行gcc*.c
来编译目录中的所有.c文件。您不需要在命令行中提供每个c文件,除非您使用-c选项gcc-c foo.c
单独编译它们,然后链接所有编译的c对象将文件放入一个可执行文件gcc foo.o bar.o-o foobar
。请注意,在不使用-c进行编译时,需要提供main()function@cigien应被接受为解决方案。这是否回答了您的问题?我需要学习如何创建用于此用途的简单制作文件…顺便说一句,谢谢,这是一个非常清楚的解释。我需要学习如何创建用于此用途的简单制作文件…顺便说一句,谢谢,这是一个非常清楚的解释
Undefined symbols for architecture x86_64:
"_getfavoritenumber", referenced from:
_main in main-7be23f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
gcc -c main.c
gcc -c f.c
gcc -o f main.o f.o