c编译器的重要性不言而喻,从往期c编译器文章中,如c编译器优化、选定c编译器等,想必大家对c编译器均已有所了解。往期文章中,小编主要从宏观方面为大家讲解c编译器,此外对于gcc c编译器的讲解也大多基于windows。本文中,小编将基于linux环境对gcc的基本使用加以讲解。如果你正在学习如何在linux系统下使用gcc编译器,不妨继续往下阅读哦。

首先使用gcc要在linux环境下,我们可以使用真正的linux系统(不过这么做可能有一些麻烦)或者使用一些windows下的虚拟软件,可以使用虚拟机搭建的linux环境,这样可以很方便的进行linux开发。可以下载安装一个虚拟机软件,方法很简单和安装普通软件一样。(g++就是c++的使用)

在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则。

.c为后缀的文件,C语言源代码文件;

.a为后缀的文件,是由目标文件构成的库文件;

.C,.cc或.cxx 为后缀的文件,是C++源代码文件;

.h为后缀的文件,是程序所包含的头文件;

.i 为后缀的文件,是已经预处理过的C源代码文件;

.m为后缀的文件,是Objective-C源代码文件;

.o为后缀的文件,是编译后的目标文件;

.s为后缀的文件,是汇编语言源代码文件;

.S为后缀的文件,是经过预编译的汇编语言源代码文件

一. 常用编译命令选项

假设源程序文件名为test.c。

1. 无选项编译链接

用法:gcc test.c

作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o

用法:gcc test.c -o test

作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E

用法:gcc -E test.c -o test.i

作用:将test.c预处理输出test.i文件。

4. 选项 -S

用法:gcc -S test.i

作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c

用法:gcc -c test.s

作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接

用法:gcc test.o -o test

作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O

用法:gcc -O1 test.c -o test

作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:

[假设有两个源文件为test.c和testfun.c]

1. 多个文件一起编译

用法:gcc testfun.c test.c -o test

作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

用法:

gcc -c testfun.c //将testfun.c编译成testfun.o

gcc -c test.c //将test.c编译成test.o

gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

运行程序 例如./a.out就可以运行程序。

以上便是此次小编带来的“c编译器”的相关内容,通过本文,希望大家对在linux环境下的gcc常用编译命令选项以及gcc多源文件的编译方法具备一定的认知和了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

Linux装c编译器gcc,c编译器进阶之路,linux下的gcc c编译器使用教程相关推荐

  1. 《Java 进阶之路》 下--推荐书籍

    真正想提升自己,我感觉最主要的是先把 JVM.并发.网络这三块知识点学会.学通,这三块是基础,后面所有的框架.中间件等相关的都是基于这三块知识点之上的.学完这三块知识点,可以快速的掌握其它的知识,新框 ...

  2. Linux进阶之路————Linux运行级别(重置密码)

    引言 前面的<Linux进阶之路----开机.重启和用户登录注销>已经简单介绍过Linux系统运行级别的概念,今天来详细介绍和总结一下Linux的运行级别. inittab配置文件 在配置 ...

  3. Linux进阶之路————Linux概述

    引言 Linux是一个开源.免费的操作系统.学习Linux知识分为以下几个阶段: 第一阶段:Linux环境下的基本操作命令,包括文件操作命令(rm.mkdir.chmod.chown)编辑工具使用(v ...

  4. Linux进阶之路————Linux磁盘分区与挂载

    引言 对于Linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录 / ,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分. Linux采用一种叫& ...

  5. linux装百度网盘不能运行,百度网盘Linux版不能登录成功,打开一直加载的解决方法...

    如果你安装了百度网盘Linux版,打开一直加载,一直不能登录成功,那请按照下面方法处理.如果你要在深度deepin系统中安装百度网盘,请到商店中去安装,已经上架百度网盘客户端了. 出现的状况及解决方法 ...

  6. linux 装windows软件,常用软件的安装(windows/linux)

    JavaScript单线程和浏览器事件循环简述 JavaScript单线程 在上篇博客的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  7. 华为电脑linux装win7不用u盘,华为MateBook D笔记本U盘安装win7系统的操作教程

    独立显卡的新版华为MateBook D,具有2GB独立显存,性能领先集成显卡4倍,同时配备了第8代智能英特尔酷睿i7-8550U或i5-8250U处理器,整体性能提升了30%,满足了用户办公或者娱乐的 ...

  8. Linux进阶之路————进程与服务管理

    引言 在Linux 中,每个执行的程序(代码)都成为一个进程,Linux 为每一个进程分配了一个唯一的 id 号 - PID. 每个进程都会对应一个父进程,而这个父进程可以复制多个子进程,例如 www ...

  9. Linux进阶之路————磁盘查询

    引言 承接<Linux进阶之路----Linux磁盘分区与挂载>,本文介绍实际生产中对于磁盘的监控和查询. 一.查询磁盘整体使用情况 基本语法: df -h 该命令会显示包括我们手动挂载的 ...

  10. Linux进阶之路-Ubuntu版

    Linux进阶之路 @[TOC](Linux进阶之路) Linux 简介 概述 Linux 与 Windows 比较 安装 Linux 操作系统 Linux 远程控制管理 概述 OpenSSH XSh ...

最新文章

  1. poj2112(floyd+二分+二分图多重匹配)
  2. 一份不错的vue.js基础笔记!!!!
  3. 设备履历管理系统php开源,航空机载设备履历本管理制作系统诞生记
  4. vue中解决时间在ios上显示NAN的问题
  5. nodejs之async异步编程
  6. java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...
  7. 团队开发-----电子秘书(便签+闹钟+音视频)
  8. 应用计算机网络的方面,计算机网络技术在电子信息工程中的应用研究(1)
  9. linux+右键快捷,LINUX 添加右键打开终端快捷方式
  10. java面向对象的多态_java面向对象(五)之多态
  11. 阿里巴巴Java开发手册终极版v1.3.0
  12. starting Tomcat v8.5 at localhost has encountered a problem
  13. 二、UI线程和界面卡死
  14. 日期工具类---DateUtil
  15. 2.4 HDFS组成架构
  16. 图论画图工具 Graph Editor
  17. RemapKey等:小巧实用的键盘映射工具
  18. Unity中使用Curvy快速生成路径,并使物体沿着路线运动
  19. 德国自动驾驶与电动出行趋势进展
  20. nssa和stub_ospf协议stub和nssa区域说明

热门文章

  1. 第一百三十九期:11月数据库排行:排名前三数据库分数暴跌
  2. Vue中token刷新及token过期的实现
  3. java容器集合类的区别用法_Java容器笔记(二):不同集合实现类的特点与区别...
  4. 基于matlab的车流量检测,求解释代码,一段交通车流量检测的代码
  5. 用python画统计图表_Python数据科学(九)- 使用Pandas绘制统计图表
  6. c++ 用eclipse建立一个类,并实例化并运行
  7. PhantomJS 一个隐形的浏览器
  8. mysql主键异常(冲突)
  9. Android---什么是3G
  10. Mantis-如何自定义流程状态