首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】编译链接

前言 这是我自己学习C语言的第八篇博客总结。后期我会继续把C语言学习笔记开源至博客上。...上一期笔记是关于C语言的自定义类型,没看的同学可以过去看看:【C语言】自定义类型-CSDN博客https://blog.csdn.net/hsy1603914691/article/details/142288412https...翻译环境是由编译和链接两个过程组成。 2. 编译过程又可以分为预处理、编译、翻译三个过程。 翻译过程 1. ⼀个C语言的项目中可能有多个.c文件⼀起构建。 2....(将 C语言代码 转化成 汇编代码 ) 词法分析 1....链接 1. 链接是⼀个复杂的过程,链接的时候需要把⼀堆文件链接在⼀起才生成 可执行程序 。 2. 链接过程主要包括: 地址和空间分配 , 符号决议 和 重定位 等这些步骤。

4100

C语言——编译和链接

编译环境:C语言代码对于我们程序员来说是易于识别和理解的,但对于计算机来说就是天书。所以需要在编译环境下将我们的代码翻译为计算机能读懂的机器指令(二进制指令)。...编译环境 而我们今天讲的编译与链接就是发生在编译环境下。 在一个项目中可能有多个.c的源文件,多个.c文件单独经过编译器,编译处理后生成目标文件。...(在Windows环境下的目标文件的后缀是 .obj ,Linux环境下目标文件的后缀是.o) 多个目标文件和链接库一起经过链接器处理后生成可执行程序。...汇编的命令如下:gcc -c test.s -o test.o 链接 我们的源代码经过编译以后,生成目标文件(.obj)的中间文件(临时文件)。...链接其实就是由连接器(link.exe) “ 打包” 的过程,它将所有二进制形式的目标文件和系统组件合成一个可执行文件。

9910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    c语言编译和链接

    2.4 链接 链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。...⽐如: 在⼀个C的项⽬中有2个.c⽂件( test.c 和 add.c ),代码如下: 对应的test.c和add.c会被编译成一个tesst.o和一个add.o,这些都是中间文件,经过最后的链接,将几个中间文件链接成一个可执行程序...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地址,但是由于每个⽂件是单独编译的,在编译器编译 test.c 的时候并不知道 Add...等待最后链接的时候由链接器根据引⽤的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引⽤到 Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,对于全局变量...前⾯我们⾮常简洁的讲解了⼀个C的程序是如何编译和链接,到最终⽣成可执⾏程序的过程,其实很多内部的细节⽆法展开讲解。

    7210

    C语言编译和链接

    注:在Windows环境下的⽬标⽂件的后缀是 .obj ,Linux环境下⽬标⽂件的后缀是 .o 多个⽬标⽂件和链接库⼀起经过链接器处理⽣成最终的可执⾏程序。 ...汇编的命令如下: gcc -c test.s -o test.o 2.4 链接 链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。...链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。 链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题。...等待最后链接的时候由 链接器根据引⽤的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引⽤到 Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,这个地址修正的过程也被叫做...结束语 本篇博客我们⾮常简洁的讲解了⼀个C的程序是如何编译和链接,到最终⽣成可执⾏程序的过程,其实很多 内部的细节⽆法展开讲解。

    5200

    【C语言】编译和链接

    一、翻译环境和运行环境 在c语言的实现中,存在两个环境 翻译环境:在这个环境中源代码被转换成可执行的二进制指令 运行环境:实际执行代码 二、翻译环境 翻译由编译和链接两个过程组成 编译又可以分为预处理...、编译、汇编三个过程 一个c语言的项目一般是由多个.c文件一起构建的,多个.c文件通过如下步骤生成可执行程序: ①多个.c文件单独经过编译器,编译处理生成对应的目标文件 ②多个目标文件和链接库一起经过链接器处理生成最终的可执行程序...③链接库是指运行时库(支持程序运行的基本函数集合)或者第三方库 注意:在Windows环境下目标文件的后缀是.obj,Linux环境下的目标文件的后缀是.o 以下就是编译与链接的过程: 1、...它通常包括声明和类型的匹配,类型的转换等,这个阶段会报告错误的语法信息 3、汇编 然后接下来一步是进入汇编器,将汇编指令转换为机器可执行的指令,根据汇编指令和机器指令的对照表一一翻译,不做指令优化 4、链接...然后就是链接,链接就是把一堆文件链接在一起生成可执行程序,它的过程主要包括:地址和空间的分配、符号决议、重定位等 重定位:当我们使用多个.c文件生成一个可执行程序的时候,由于编译的时候是每个文件单独编译的

    8810

    【C语言】编译与链接

    前言 我们想一个问题,我们写的C语言代码都是文本信息,电脑能直接执行c语言代码吗?...肯定不能啊,计算机能执行的是二进制指令,所以将C语言转化为二进制指令需要一段过程,这篇博客讲一下编译与链接,来一起探讨C语言是如何转化为二进制指令的。...一个C语言的项目中可能有多个 .c 文 件一起构建,那多个 .c 文 件如何生成可执行程序呢? • 多个.c文件单独经过编译器,编译处理生成对应的目标文件。...Add 的指令的目标地址搁置, 等待最后链接的时候由链接器根据引用的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引用到Add 的指令重新修正,让他们的目标地址为真正的...结束语 本篇博客总结了编译和链接涉及C语言的有关知识,其实很多内部的细节无法展开总结。

    11910

    C语言--编译和链接

    1.翻译环境 计算机能够执行二进制指令,我们的电脑不会直接执行C语言代码,编译器把代码转换成二进制的指令; 我们在VS上面写下printf("hello world");这行代码的时候,经过翻译环境,生成可执行的...exe文件,这个主要是编译器完成,生成可执行的文件以后,要进行运行,这个运行主要是由我们的操作系统决定的; windows环境下面,.c文件经过编译器(cl.exe)的处理,生成.obj的目标文件,这个里面可能会有多个源文件...,每个源文件都会生成各自的目标文件,这个过程就叫做编译;目标文件和链接库经过链接器(link.exe)的处理就生成了可执行文件,这个过程叫做链接; 2.预处理(简介) 编译其实是分3个过程的,分别是预处理生成...处理编译指令,删掉我们写的注释(通过这个地方我们也可以看出来注释是写给我们程序员自己看的,并不会真正的到目标文件里面),预处理主要是处理那些以#开头的指令; 3.编译 词法分析,语法分析,语义分析,主要是把C代码...标识符、字⾯量、特殊字符等); 语法分析是以表达式为节点生成语法树; 语义分析主要是进行数据类型的区分,以及数据类型的匹配; 汇编是把汇编代码转换成为机器指令,机器指令就是我们常说的二进制指令; 4.链接

    8010

    C语言---编译和链接

    -S test.i -o test.s -S就是对刚刚生成的test.i进行处理 让他汇编之后停下来,-o生成一个文件名叫test.s 我们经过编译阶段就生成了汇编代码 这个过程中达到的效果是: 将c语言中的代码转换成汇编代码...汇编的命令如下:gcc -c test.s -o test.o 对test.s这个文件进行汇编,生成了一个文件叫test.o 那么总结下来汇编这个阶段就是将汇编代码翻译成二进制的指令(机器指令) 链接...链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。...链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题 我们在add.c中写一个加法函数 在test.c中调用加法函数 我们最后要在这个阶段将两个文件的符号表进行合并 合并之后,在add.c中的加法函数的地址和...等待最后链接的时候由 链接器根据引⽤的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引⽤到 Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,对于全局变量

    7910

    【C语言】编译与链接

    1.2在ANSI C的任何一种实现中,存在两个不同环境。 二.翻译环境 2.1.总览 2.1.1翻译环境是由编译与链接两个大过程组成的,编译又可以分为预处理(预编译)、编译、汇编三个过程。...c. 开始执行程序代码。这个时候程序将使用⼀个运行时堆栈(stack),存储函数的局部变量和返回地址。...⼀个C语言的项目中可能有多个 .c 文件⼀起构建,那多个 .c 文件如何生成可执行程序呢? • 多个.c文件单独经过编译器,一个.c文件经编译处理生成一个对应的目标文件。...• 注:在Windows环境下的目标文件的后缀是 .obj ,Linux环境下目标文件的后缀是 .o • 多个目标文件和链接库⼀起经过链接器处理生成最终的可执行程序。...2.5链接 链接是⼀个复杂的过程,链接的时候需要把⼀堆文件链接在⼀起才生成可执行程序。链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。

    8410

    C语言程序编译和链接

    链接  链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。 链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。...链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题 如果名字写错 通过地址无法找到。 每个源⽂件都是单独经过编译器处理⽣成对应的⽬标⽂件。...test.c 经过编译器处理⽣成 test.o  add.c 经过编译器处理⽣成add.o  我们在 test.c 的⽂件中使⽤了 add.c ⽂件中的 Add 函数和 g_val 变量。...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地 址,但是由于每个⽂件是单独编译的,在编译器编译 test.c 的时候并不知道 Add...等待最后链接的时候由链接器根据引⽤的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引⽤到 Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,对于全局变量

    11310

    C语言详解(编译和链接)

    前言 在 ANSI C (标准C)的任何一种实现中,存在两个不同的环境 翻译环境:源代码被转换为可执行的机器指令(二进制指令) 执行环境:用于实际执行代码 就像语言不通的一个中国人和一个美国人,他们想要交流就需要一个翻译...同样的,人类能理解的语言和机器能理解的语言也是不通的,如果我们想要和机器交流也需要一个翻译。本篇文章将详细探讨这个翻译的过程,短文一篇,感谢阅读。...1、翻译环境 翻译环境,笼统地说就是编译和链接的过程。 翻译环境生成的就是.exe文件(可执行文件): 一个C语言的项目中可能有多个.c文件一起构建,那多个.c文件如何生成可执行程序呢?...多个.c文件单独经过编译器,编译生成对应的目标文件 在Windows环境下的目标文件的后缀是.obj,Linux环境下目标文件的后缀是.o 多个目标文件和链接库一起经过链接器处理生成最终的可执行程序 链接库是指运行时库...g_val的地址搁置,等待最后链接的时候由链接器根据引用的符号add在其他模块中查找add函数的地址,然后将main.c中所有引用到add的指令重新修正,让他们的目标地址为真正的add函数的地址,对于全局变量

    7410

    C语言——Q编译和链接

    • 多个目标文件和链接库⼀起经过链接器处理⽣成最终的可执⾏程序; • 链接库是指运⾏时库(它是⽀持程序运⾏的基本函数集合)或者第三⽅库; 如果再把编译器展开成3个过程,那就变成了下⾯的过程...汇编的命令如下: gcc -c test.s -o test.o 4、链接 链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。...链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。 链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题。...等待最后链接的时候由链接器根据引⽤的符号 Add 在其他模块中查找 Add 函数的地址,然后将 test.c 中所有引⽤到 Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,对于全局变量...前⾯我们⾮常简洁的讲解了⼀个C的程序是如何编译和链接,到最终⽣成可执⾏程序的过程,其实很多内部的细节⽆法展开讲解。

    11410

    初识C语言·编译与链接

    1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令....s为后缀的文件 -> 经过汇编生成.o为后缀的文件 -> 经过链接器和链接库生成最后的可执行文件.exe 预处理: 在gcc环境下,我们使用指令: gcc -E test.c -o test.i 使机器生成...汇编: 汇编的指令如下: gcc -c test.s -o test.o 汇编器将汇编代码变成机器可以执行的指令,每一个汇编语句几乎都对应一个机器指令,而汇编语言较难的一个原因就是不同的机器的汇编语言是不一样的...链接: 链接是一个复杂的过程,需要将一堆文件链接在一起才能生成可执行程序。 链接包括分配地址,分配空间,符号决议,重定位,等步骤。...链接解决的是一个项目中多文件多模块互相调用的问题,比如一个C语言的项目中有两个.c文件(test.c add.c) extern int Add(int, int);//声明外部函数 extern int

    10110

    C语言编译和链接理解

    翻译环境和运行环境 : 1.翻译环境和运行环境:在ANSI C的任何⼀种实现中,存在两个不同的环境。...⼀个C语⾔的项⽬中可能有多个 .c 文件⼀起构建,那多个 .c 文件如何⽣成可执行程序呢?...(1) 多个.c⽂件单独经过编译器,编译处理⽣成对应的⽬标⽂件 (2) 注:在Windows环境下的⽬标⽂件的后缀是 .obj ,Linux环境下⽬标⽂件的后缀是 .o (3)多个⽬标⽂件和链接库⼀起经过链接器处理...翻译环境:预编译+编译+汇编+链接: 1.预编译:在预处理阶段,源⽂件和头⽂件会被处理成为.i为后缀的⽂件 在 gcc 环境下想观察⼀下,对 test.c ⽂件预处理后的.i⽂件,命令如下: gcc...汇编命令:gcc -c test.s -o test.o 4.链接: 链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。

    8910

    初识编程语言·C语言

    语言是交流的基础,那么,C语言也是交流的基础。 那么,与谁交流呢? 人与人是用汉语,英语等交流的,那么人与计算机就是用编程语言交流的。...故,C语言是一门人与计算机交流的语言,当然,语言不只有一种,还有Java,python等。 语言是在发展过程中不断完善的,C语言同样如此。...在了解语言后,就应了解如何是代码运行起来。 C语言本身的源代码是文本文件,而文本文件本身是无法运行的,需要编译器翻译和链接器的链接生成可执行的二进制文件,可执行文件才可以执行。...C语言的代码是放在以.c为后缀的文件里面的,要执行,就需要经理编译和链接两个环节。 每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)。...多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)。

    9910

    C语言编程—常量

    字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。...在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。...; //系统对字符串常量自动加一个 '\0' 定义常量 在 C 中,有两种简单的定义常量的方式: 使用 #define 预处理器。 使用 const 关键字。...{ int area; area = LENGTH * WIDTH; printf("value of area : %d", area); printf("%c"..., NEWLINE); return 0; } 当上面的代码被编译和执行时,它会产生下列结果: value of area : 50 请注意,把常量定义为大写字母形式,是一个很好的编程习惯。

    24630
    领券