• GCC简介
  • GCC基本用法
  • GCC程序产生过程
  • GCC编译选项

一、GCC简介

1.1 GCC特点

Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的

代表作之一。Gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器

相比平均效率要高20%~30%。

1.2 Gcc基本用法

Gcc最基本的用法是∶

gcc [options] filenames
options:编译器所需要的编译选项
filenames: 要编译的文件名

二、GCC程序产生过程

三、GCC文件后缀

Gcc通过后缀来区别输入文件的类别,常见类型有:

  • .c为后缀的文件: C语言源代码文件
  • .a为后缀的文件: 是由目标文件构成的库文件
  • .C,.cc或.cxx 为后缀的文件: 是C++源代码文件
  • .h为后缀的文件: 头文件
  • .o为后缀的文件: 是编译后的目标文件
  • .s为后缀的文件: 是汇编语言源代码文件

四、GCC常见编译选项

-o output_filename

确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就

给出预设的可执行文件a.out。

-O (大写O ,程序优化)
  • -O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、连接过程中进行

    优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、连接的速度就相应地要慢一些。
  • -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
//比较运行结果
1. gcc optimize.c -o optimize
time ./optimize
2. gcc –O optimize.c -o optimize
time ./optimize
-c:不链接。编译器只是由输入的.c等源代码

文件编译生成.o为后缀的中间文件。

-g:

产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项

-I dirname:

将dirname所指出的目录作为编译器寻找头文件的标

准路径。

C程序中的头文件包含两种情况∶

  • include <A.h>

  • include “B.h”

  • 尖括号和引号的区别

对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻

相应的文件;而对于””,gcc在当前目录中搜寻头文件。

-I选项的作用是告诉gcc,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找(批量添加自定义头文件路径)

例:gcc hello.c -I /home/Louis/Desktop -o hello
编译警告

编译错误与编译警告都是我们的程序设计中经常遇到的问题. 编译错误一般是代码中出现语法错误,程序无法编译执行,必须修改. 编译警告是编译器发现程序中不合理的地方(比如类型不匹配),建议最好修改,但不修改也可以编译执行。

  • -Wall:生成所有警告信息
  • -w:不生成任何警告信息
-DMACRO:

定义MACRO 宏,等效于在程序中使用#define MACRO

【Linux】GCC编译的更多相关文章

  1. linux gcc 编译动态类库(.so)和静态类库(.a)

    linux gcc 编译动态类库(.so)和静态类库(.a) 我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h vo ...

  2. Linux gcc 编译日记

    gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器. 在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l ...

  3. Linux GCC编译警告:Clock skew detected. 错误解决办法

    今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...

  4. Linux Gcc编译错误(转载)

    转自:http://www.linuxidc.com/Linux/2012-01/52153.htm Linux系统下的c编程与Windows有所不同,如果你在用gcc编译代码的时候提示‘for’ l ...

  5. linux --> gcc编译之路径搜索

    gcc编译之路径搜索 头文件 --> 搜寻先从-I开始; --> 找gcc的环境变量 : C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA ...

  6. Linux gcc编译之-std选项

    用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明

  7. Linux gcc编译(动态库,静态库)

    1. linux 库路径: /lib , /usr/lib , /usr/local/lib 2.linux 编译静态库 a.编写源文件vi pr1.c void print1(){    print ...

  8. linux gcc 编译时头文件和库文件搜索路径

    一.头文件    gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始    ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...

  9. Linux GCC编译库

    本文主要解决以下几个问题 1).为什么要使用库? 2).库的分类 3).创建自己的库 为什么要使用库? 或许大家对自己初学 Linux时的情形仍记忆尤新吧.如果没有一个能较好的解决依赖关系的包管理器, ...

  10. Linux GCC编译使用动态、静态链接库 (转)

    原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.s ...

随机推荐

  1. 批量改ID 行形式

    update [Temp_Sql] set ID(字段) = (274+ID(字段))  字段+字段形式 可以以行形式批量修改

  2. sharding-jdbc数据分片配置

    数据分片 不使用Spring 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> ...

  3. FPGA基础学习(3) -- 跨时钟域处理方法

    文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...

  4. JAVA数据结构--希尔排序

    希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能.这样可以让一个元素可以一次性地朝最终位置前进一大步.然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需 ...

  5. 查找表set和map 349, 350

    两类查找问题: 1)查找有无: - 某个元素是否存在,通常使用set(集合) 2)查找对应关系(键值对应) - 某个元素出现了几次,map(字典) set和map都不允许里面的键值重复. 常见操作: ...

  6. HDU1286

    欧拉函数测试题 期末考试完了做下水题 更好的方法是phi[i]==i时就直接筛选,不改了 #include<bits/stdc++.h> using namespace std; cons ...

  7. C# DictionaryHelper

    1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System ...

  8. 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

    参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

  9. linux命令eval的用法

    [转自]http://blog.chinaunix.net/uid-21411227-id-1826706.html 1. eval command-line 其中command-line是在终端上键 ...

  10. 基于scrapy的一些实例

    一.爬取斗鱼主播 1. 爬虫文件 # -*- coding: utf-8 -*- import scrapy import json from Douyu.items import DouyuItem ...