Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我不知道';我不知道如何链接多个文件_C - Fatal编程技术网

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一起包含进来,它就可以

我正在学习如何使用头文件,在链接这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
一起包含进来,它就可以工作了


所以,在编译时,我应该包括我在项目中使用的每个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