C从源码到运行发生了哪些事

一个C/C++程序从源代码到可执行程序主要经历了四个阶段:

  ①预处理。包括展开宏、处理#include,#if,#ifdef等指令、删除注释、还有一些其他操作。相关命令:gcc -E或cpp

  ②编译。对预处理文件进行分析并生产汇编代码,主要包括语法分析、语义分析、汇编代码生成、(源/汇编)代码优化。相关命令:gcc -S

  ③汇编。根据编译产生的汇编代码生成机器指令,过程相当于是根据汇编语法进行翻译。相关命令:gcc -c或as

  ④链接。用链接器链接程序运行需要的目标文件和库文件,生成可执行文件。链接分为动态链接和静态链接。相关命令gcc或ld

整个过程可以用下面的流程图来表示:

要注意对于静态链接库,在进行链接步骤时,相关实现代码会融合到a.out中;而对动态链接库,在链接时,相当于在程序中进行了标记,并没有把具体实现代码融合进来,所以在程序运行的时候,会调用具体的实现代码。简而言之,静态链接库具有时间优势,而动态链接库具有空间优势。通常会优先考虑用动态链接库。

时间: 2024-10-01 20:55:53

C从源码到运行发生了哪些事的相关文章

Jasperreport源码&demo运行

Jasperreport是著名的报表开源项目,提供了非常丰富的功能,可以满足日常开发中大部分的需求,下面将就该开源项目的demo运行做一些说明. 1.从sourceforge上下载jasperreport的工程http://sourceforge.net/projects/jasperreports/: 2.解压开,并导入eclipse/myeclipse,导入后的目录结构如下: 3.demo目录下为官方对应的示例,有三个目录,分别为hsql(内存数据库),font(字体)和samples(报表

【COCOS2D-HTML5 开发之三】示例项目附源码及运行的GIF效果图

本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d-html5/1528.html ? 点击订阅 ? 本博客最新动态!及时将最新博文通知您! Cocos2dx html5开发,对于用过2d Or -x的童鞋来说很容易,Himi这里也没有必要去再跟同学们详细的教学一遍. 所以Himi简单做了一个项目,供给大家参考,源码下载地址及GIF截图在文章最后!

linux调度器源码分析 - 运行(四)

本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运行的情况下进行进程调度的. 系统定时器 因为我们主要讲解的是调度器,而会涉及到一些系统定时器的知识,这里我们简单讲解一下内核中定时器是如何组织,又是如何通过通过定时器实现了调度器的间隔调度.首先我们先看一下内核定时器的框架 在内核中,会使用strut clock_event_device结构描述硬件

linux中断源码分析 - 中断发生(三)

本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 回顾 上篇文章linux中断源码分析 - 初始化(二)已经描述了中断描述符表和中断描述符数组的初始化,由于在初始化期间系统关闭了中断(通过设置CPU的EFLAGS寄存器的IF标志位为0),当整个中断和异常的初始化完成后,系统会开启中断(设置CPU的EFLAGS寄存器的IF标志位为1),此时整个系统的中断已经开始可以使用了.本篇文章我们具体研究一次典型中断发生时的运行流程. 中断产生 我们需要先明确一下,中断控

【转】在Ubuntu下编译Android源码并运行Emulator

原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK   $ sudo apt-get install sun-java5-jdk  或   $ sudo apt-get install sun-java6-jdk (donut 1.6)3.安装flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可选),build-ess

open-stf二次开发 源码编译运行

下载open-stf源码 https://github.com/openstf/stf 安装open-stf到本地 sudo npm install (可选) cnpm install (推荐使用淘宝镜像) 实操发现,此步骤会自动编译,无需执行下面命令 安装package.json cnpm install package.json 编译(angular 开发,用的是gulp构建工具) gulp clean && gulp webpack:build 安装过程中可能会提示某些module

放出一批jsp图书管理系统图书借阅系统源码代码运行

基于jsp+mysql的JSP图书销售管理系统 https://www.icodedock.com/article/105.html基于jsp+Spring+Spring MVC的Spring图书借阅管理系统 https://www.icodedock.com/article/71.html基于jsp+mysql的JSP图书管理系统 https://www.icodedock.com/article/39.html基于jsp+Spring+mybatis+Spring boot的SpringBo

Zico源码分析:运行启动过程分析和总结

其实已经有童鞋对Zico的源码和运行过程进行了总结,例如:http://www.cnblogs.com/shuaiwang/p/4522905.html.这里我再补充一些内容.当我们使用mvn install将Zico打包成war包后,将其解压后可以看到MANIFEST.MF文件中指定的主类是:com.jitlogic.zico.main.ZicoMain,简单看一下这个类,发现其主要作用是启动Jetty Web Server,并加载配置文件,实现一些安全配置.那么我们需要问了,这个war包是怎

白话开发——自己动手编译Android源码

在Android Studio代码调试一文中,简单的介绍了Android Studio代码调试的一些技巧.现在呢,我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解). 本文使用最新的Ubuntu 16.04,在开始之前,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装: sudo apt-get install git git confi