【C语言】编译+链接

news2025/1/26 15:36:38

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

        在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 函数;也有可能是意外终止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32电动车报警器

目录 项目需求 项目框图 硬件清单 振动传感器介绍及实战 振动传感器介绍 振动传感器编程实现 继电器介绍及实战 继电器工作原理 433M无线发射接收模块介绍及实战 433M无线发射接收模块介绍 ​编辑 433M编程实现 项目设计及实现 编程实现 项目需求 点击遥控器A 按键…

规约第二章

文章目录有限域的定义Definition of Finite Field单位元运算举例素数域群阿贝尔群阿贝尔循环群循环子群阿贝尔循环群且阶是素数的有限域的定义Definition of Finite Field 单位元 这里一般只需要记住2个0&#xff0c;1 。0是加法的单位元&#xff0c;1是乘法的单位元。以及逆…

【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框架及UI小部件

Webix是Javascript库 一种软件产品 用于加速Web开发的 JavaScript UI库和框架 Webix用于跨平台Web应用程序开发的JS框架&#xff0c;为您提供102个UI小部件和功能丰富的CSS/HTML5 JavaScript控件 开发商介绍 Webix团队由由热衷于创建高质量网络产品的专业人士组成&#xff…

docker desktop安装K8S

文章目录一、配置镜像源二、使用步骤1.引入库2.安装k8s3.加载资源4.K8S官方dashboard总结摘抄这个&#xff0c;因为这个有些不全 导致走了一些弯路 一、配置镜像源 国外特别的慢 {"debug": true,"experimental": false,"insecure-registries":…

CSS的常用元素属性,显示模式,盒模型,弹性布局

目录 1.常用元素属性 1.1字体属性 设置字体 设置大小 字体粗细 文字样式 1.2文本属性 文字颜色 文字对齐 ​编辑文本装饰 文本缩进 ​编辑行高 ​编辑1.3背景属性 背景颜色 背景位置 背景尺寸 1.4圆角矩形 2.元素的显示模式 2.1块级元素(display:block) 2.…

Excel绘制数据对比表格-表格可视化

Word中生成的表格一般比较单调&#xff0c;若一组数据存在对比的情况时&#xff0c;读者/审稿人难以直接通过详细对比数据来分析&#xff0c;此时若可以将该组数据可视化来对比则为好&#xff0c;Excel则可实现该功能。 关于有些期刊需要提供表格中的数据便于复制等情况时&…

新闻发布网站分析及适用场景

在当今数字时代&#xff0c;发布新闻的渠道已经不再局限于传统媒体&#xff0c;越来越多的企业、组织和个人开始使用互联网平台发布新闻稿&#xff0c;以提升品牌知名度和影响力。本文将介绍一些可以发布新闻的网站&#xff0c;并分析其特点和适用场景。一、新闻稿发布平台1.新…

SpringCloud+SpringCloudAlibaba

架构的演进1.1单体架构将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中&#xff0c;最终经过编译、打包&#xff0c;部署在一台服务器上。◆ 1.1.1单体架构的优点1&#xff09;部署简单: 由于是完整的结构体&#xff0c;可以直接部署在一个服务器上即可。2&…

启动Idea报Failed to create JVM. JVM Path:

一、如果设置Idea自定义虚拟内存错误导致无法正常打开Idea 1.1、打开自定义Idea虚拟内存&#xff1a;Help - Edit Custom VM Options 1.2、如果idea64.exe.vmoptions设置非法字符&#xff0c;会导致打开idea报错 1.3、打开Idea提示如下 内容如下&#xff1a; ----------------…

信号、signal 函数、sigaction 函数

文章目录1.信号的基本概念2.利用 kill 命令发送信号3.信号处理的相关动作4.信号与 signal 函数4.1 signal 函数示例一4.2 signal 函数示例二5.利用 sigaction 函数进行信号处理6.利用信号处理技术消灭僵尸进程1.信号的基本概念 发送信号是进程之间常用的通信手段。信号用来通知…

算法刷题-只出现一次的数字、输出每天是应该学习还是休息还是锻炼、将有序数组转换为二叉搜索树

只出现一次的数字&#xff08;位运算、数组&#xff09; 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 说明&#xff1a; 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗&…

有java基础学习大数据该如何规划

大数据开发对于Java语言的依赖程度比较高&#xff0c;如果想尝试大数据开发&#xff0c;学习过Java语言就很容易上手 Java是目前使用广泛的编程语言之一&#xff0c;具有的众多特性&#xff0c;特别适合作为大数据应用的开发语言。 目前很多大数据开发团队都在使用Java语言&a…

MySQL——插入加锁/唯一索引插入死锁/批量插入效率

本篇主要介绍MySQL跟加锁相关的一些概念、MySQL执行插入Insert时的加锁过程、唯一索引下批量插入可能导致的死锁情况&#xff0c;以及分别从业务角度和MySQL配置角度介绍提升批量插入的效率的方法&#xff1b;MySQL跟加锁相关的一些概念在介绍MySQL执行插入的加锁过程之前&…

核酸检测信息管理系统

目录前言一、功能与需求分析二、详细设计与实现1、data包&#xff08;1&#xff09;DataDataBase&#xff08;2&#xff09;NaPaNamePassword2、operation包&#xff08;1&#xff09;操作接口&#xff08;2&#xff09;Resident用户功能&#xff08;3&#xff09;Simper用户功…

Java基础总结(jdk,jvm,异常,对象等)

文章目录前言一、Java基础part 1JDKJRE字节码位运算变量成员变量与局部变量的区别&#xff1f;基本数据类型装箱拆箱JVM1.Java内存区域Hotspot对象对象的创建&#xff1a;对象的内存布局part2面向对象面向对象三大特征构造方法接口&#xff1b;抽象类深拷贝和浅拷贝ObjectStrin…

阿里HPCC算法简介

摘要&#xff1a;HPCC&#xff08;高精度拥塞控制&#xff09;基于INT&#xff08;带内遥测&#xff09;技术&#xff0c;可以非常精确的获取网络的拥塞状态&#xff0c;能够实现快速的收敛以及利用带宽&#xff0c;并通过实现“零队列”来实现超低的延迟&#xff0c;下面将主要…

Presto本地开发,plugin的设置

1. 新的问题 之前搭建Presto的本地开发环境时&#xff0c;一直使用config.properties中的plugin.bundles配置项定义需要加载的plugin模块&#xff0c;详细可以参考博客《win10基于IDEA&#xff0c;搭建Presto开发环境》presto服务启动时&#xff0c;指定加载哪些组件&#xff…

kubernetes--监控容器运行时:Falco

目录 Falco介绍 Falco架构 Falco的安装 告警规则示列 威胁场景测试&#xff1a; 监控容器创建的不可信任进程&#xff08;自定义规则&#xff09; Falco支持五种输出告警方式falco.yaml&#xff1a; Falco告警集中化展示&#xff1a; Falco介绍 Falco是一个Linux安全工具…

使用chatgpt来提高你的编程能力,简直如虎添翼

下面大家跟着我的问题&#xff0c;可以跟着我一起向 chatgpt老师学习&#xff0c;相信我的问题可能你也会感兴趣。在Java中&#xff0c;boolean类型的数组默认初始化为false。也就是说&#xff0c;如果你创建了一个boolean类型的数组&#xff0c;但是没有初始化它&#xff0c;那…

嵌入式 Linux进程间通信之信号量

目录 一、信号量 1、信号量概述 2、什么是信号量 3、信号量的分类 4、进程获取共享资源要执行的操作 5、System V IPC 机制&#xff1a;信号量 5.1 semget函数 5.2 semop函数 5.3 semctl函数 一、信号量 1、信号量概述 信号量集&#xff1a;由若干个信号组成的集合&a…