使用gcc编译程序是,其过程主要分为四个阶段:预处理,编译,汇编,连接

程序清单:

 #include<stdio.h>
#include<stdlib.h>
int main(int argc,char** argv)
{
printf("Hello Linux ,i am coming---------------\n");
return ;
}

1.预处理(cpp):生成 *.i 的预处理文件,该过程只激活预处理,不生成文件,所以需要重定向一个输出文件

使用指令 -E,如gcc -E main.c -o main.i  或

        cpp main.c -o main.i

2.编译(ccl):生成 *.s 文件,该过程只激活预处理和编译, 关联文件可以是*.i  或 *.c

使用指令 -S ,如 gcc -S main.c -o main.s 或

         gcc -S main.i -o main.s 或

         ccl -S main.c -o main.s

3.汇编(as):生成 *.o 文件,该指令只激活预处理、编译和汇编, 关联文件可以是 *.c 、*.i 、*.s 三者之一

使用指令 -O ,如 gcc -c main.c -o main.o 或

         gcc -c main.i -o main.o 或

         gcc -c main.s -o main.o 或

         as main.c -o main.o

4.连接(ld):生成可执行文件,相关联文件可以是 *.c 、*.i 、*.s 、*.o之一

gcc main.c -o main 或

gcc main.i -o main 或

gcc main.s -o main 或

gcc main.o -o main 或

ld main.c -o main

当一个项目中包含两个或两个以上的C文件时,这种编译方法就显得力不从心了,这时就要用到makefile了

为了结合上面的gcc指令,我写了如下的makefile文件

 main:main.o
gcc main.o -o main
main.o:main.s
gcc -c main.s -o main.o
main.s:main.i
gcc -S main.i -o main.s
main.i:main.c
gcc -E main.c -o main.i

Linux之C编译器gcc和makefile使用简介的更多相关文章

  1. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

  2. 【Linux开发】如何在./configure的时候将编译参数传入,改变默认的编译器gcc成arm-linux-gcc

    如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux-gcc [问题] 想要用交叉编译工具arm-linux-gcc去编译lrzsz, 但是在./configure的 ...

  3. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  4. linux驱动开发之GCC问题

    最近正在学习驱动开发,进展到字符设备驱动开发阶段. 先不多说,首先把刚看的一篇学习驱动步骤的帖子记录如下: 1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. ...

  5. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...

  6. MinGW安装教程——著名C/C++编译器GCC的Windows版本

    前言本文主要讲述如何安装 C语言 编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更 ...

  7. linux驱动学习(二) Makefile高级【转】

    转自:http://blog.csdn.net/ghostyu/article/details/6866863 版权声明:本文为博主原创文章,未经博主允许不得转载. 在我前一篇写的[ linux驱动学 ...

  8. 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)

    发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ...

  9. gcc与makefile编译 BY 四喜三顺

    gcc编译控制过程:(假设源代码为a.c)(1)源文件到预处理文件:    gcc -E -o a.cxx a.c    a.cxx显示调用哪些头文件(2)生成汇编代码:              g ...

随机推荐

  1. Delphi- 数据加密和解密

    Delphi进行数据加密,在数据库方面经常要使用到.从网上转载过来的,以后会经常会用到. 一.MD5加密算法 在C#/.Net里提供了MD5加密的类库.在Delphi中没有.只能自己建一个新的单位,将 ...

  2. android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现

              android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现 首先看到selector的属性: android:state_focus ...

  3. PetShop 4.0学习笔记:消息队列MSMQ

    直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...

  4. 更改Mysql数据库存储位置的具体步骤

    首先把mysql的服务先停掉,更改MySQL配置文件My.ini中的数据库存储主路径,将老的数据库存储主路径中的数据库文件和文件夹复制到新的存储主路径,接下来重启搞定     一.首先把mysql的服 ...

  5. 推荐一本好的c#高级程序设计教程

    哪位大神推荐一本好的c#高级程序设计教程 小弟在此感激不尽,谢谢

  6. android学习笔记之ImageView的scaleType属性

    我们知道,ImageView有一个属性叫做scaleType,它的取值一共有八种,分别是:matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCro ...

  7. p

    都不知道简历去投什么地方.游戏都卖不出去,又做不出口碑好的.这些人是心存侥幸还是心存坚持. 感觉自己搞不清楚就很难再出发.

  8. webstom 如何获取github上面的项目工程

    需要你配好webstorm的github相关的配置,安装好git.exe; 如何配置请参考: webstorm 如何配置git 这个点击github后 会有个提示框 如下图: 如果没有成功,会弹出下面 ...

  9. Optimal Logging

    by Anthony Vallone How long does it take to find the root cause of a failure in your system? Five mi ...

  10. c#常用的一些命名空间

    using System.Collections; 有ArrayList;Hashtable;Stack;Queue;DictionaryEntry;等集合 using System.Data; 访问 ...