【C语言】编译+链接

一、程序的翻译环境和执行环境

        在ANSI C 的任何一种实现中,存在两个不同的环境。
1 种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第 2 种是执行环境,它用于实际执行代 码。
        详解编译+ 链接
                翻译环境
1.组成一个程序的每个源文件通过编译过程分别转换成目标代码( object code )。
2.每个目标文件由链接器( linker )捆绑在一起,形成一个单一而完整的可执行程序。
3.链接器同时也会引入标准 C 函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中

 编译本身也分为几个阶段:

        看代码:

        sum.c

int g_val = 2016;
void print(const char *str)
{
 printf("%s\n", str);
}

        test.c

#include <stdio.h>
int main()
{
 extern void print(char *str);
 extern int g_val;
 printf("%d\n", g_val);
 print("hello bit.\n");
 return 0;
}

        1. 预处理 选项 gcc - E test.c - o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在 test.i 文件中。
        2. 编译 选项 gcc - S test.c 编译完成之后就停下来,结果保存在 test.s 中。
        3. 汇编 gcc - c test.c 汇编完成之后就停下来,结果保存在 test.o
        
        运行环境
        
        程序执行的过程:
        
        1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须 由手工安排,也可能是通过可执行代码置入只读内存来完成。
        2. 程序的执行便开始。接着便调用 main 函数。
        3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈( stack ),存储函数的局部变量和返回地址。程序同 时也可以使用静态( static )内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
        4. 终止程序。正常终止 main 函数;也有可能是意外终止。

猜你喜欢

转载自blog.csdn.net/m0_73367097/article/details/129404647