【Linux】GCC编译
- 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编译的更多相关文章
- linux gcc 编译动态类库(.so)和静态类库(.a)
linux gcc 编译动态类库(.so)和静态类库(.a) 我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h vo ...
- Linux gcc 编译日记
gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器. 在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l ...
- Linux GCC编译警告:Clock skew detected. 错误解决办法
今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...
- Linux Gcc编译错误(转载)
转自:http://www.linuxidc.com/Linux/2012-01/52153.htm Linux系统下的c编程与Windows有所不同,如果你在用gcc编译代码的时候提示‘for’ l ...
- linux --> gcc编译之路径搜索
gcc编译之路径搜索 头文件 --> 搜寻先从-I开始; --> 找gcc的环境变量 : C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA ...
- Linux gcc编译之-std选项
用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明
- Linux gcc编译(动态库,静态库)
1. linux 库路径: /lib , /usr/lib , /usr/local/lib 2.linux 编译静态库 a.编写源文件vi pr1.c void print1(){ print ...
- linux gcc 编译时头文件和库文件搜索路径
一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...
- Linux GCC编译库
本文主要解决以下几个问题 1).为什么要使用库? 2).库的分类 3).创建自己的库 为什么要使用库? 或许大家对自己初学 Linux时的情形仍记忆尤新吧.如果没有一个能较好的解决依赖关系的包管理器, ...
- Linux GCC编译使用动态、静态链接库 (转)
原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.s ...
随机推荐
- 6A - Daydreamin
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll dp[] ...
- 《Java并发编程实战》第十章 避免活跃性危急 读书笔记
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/love_world_/article/details/27635333 一.死锁 所谓死锁: 是指两 ...
- mysql数据库分库分表shardingjdbc
分库分表理解 分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分 垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段 ...
- 报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出。网上查询了一些.NET 的C#例子,发现都实现的比较复杂
报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出.网上查询了一些.NET 的C#例子,发现都实现的比较复杂,其实这个问题可以很简单的通过.NET的DateTime函数来实现 ...
- 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】
树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...
- bzoj3252 攻略 dfs序+线段树
题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...
- [转] Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch
[From] http://www.tuicool.com/articles/JBvQrmj 本文讲解Spring Boot基础下,如何使用 ElasticSearch,实现全文搜索. 版本须知 sp ...
- Oracle Pipelined Table Functions简介
转自: http://www.linuxidc.com/Linux/2011-05/35797.htm //概况 //基本上,当你希望一个PLSQL(或者java或者c)程序作为数据源,而不是表, ...
- C#中Using里使用单例的问题
又给自己挖了一个坑跳进去. KafkaManager使用单例模型获取到一个producer,然而自己代码里用的时候加了一个using using (var producer = KafkaManage ...
- 网站ico那点事儿
一. 如何获取某个网站的favicon.ico http://moco.imooc.com/player/report.html 今天看到这个网站上,左侧的小图片挺好看的,想弄下来,检查源码,也没有看 ...