【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 ...
随机推荐
- 洛谷 P3376【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 黑马学习CSS之CSS模块化规范全部组成 CSS属性列表
- Exadata 18.1新特性--云平台存储节点升级
1.传统方式的存储节点升级流程: (1).将存储节点升级包下载到数据库服务器,通常是DB01上. (2).解压缩存储节点升级包. (3).用升级包中的patchmgr工具滚动或非滚动地升级每个存储节点 ...
- CentOS7 下使用 Nginx
update: 2019-03-25 --新增新装 Nginx 的启动.重启.关闭和查看 2019-02-19 --新增 yum 方式快速简单安装 Nginx 2018-09-29 --新增配置文件对 ...
- pandas中,dataframe 进行数据合并-pd.concat()
``# 通过数据框列向(左右)合并 a = pd.DataFrame(X_train) b = pd.DataFrame(y_train) # 合并数据框(合并前需要将数据设置成DataFrame格式 ...
- rem.js的用法及在浏览器端的适配
首先介绍下自己,我是从后端转前端,对于前端的见识还不深望各位全当一个新手自述....... 随着移动设配的更新换代,市场上涌现了大量的非主流设备分辨率,比如华为手机...... 更新换代快的大前提下自 ...
- nginx优化项目
隐藏版本信息 server_tokensSyntax: server_tokens on | off | build | string;Default: server_tokens o ...
- 使用bind配置DNS服务(CentOS 6.5)
DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 正向解析:根据主机名(域名)查找对应的IP地址. 反向解析:根据I ...
- android AIDL服务
这篇文章http://byandby.iteye.com/blog/1026110我们介绍了android的本地服务:它只能由承载它的应用程序使用.现在我们将介绍如何构建可由其他进程通过 RPC 使用 ...
- php之mongodb插入数据后如何返回当前插入记录ID
<?php /** *插入记录 *参数: *$table_name:表名 *$record:记录 * *返回值: *成功:true *失败:false */ function insert($t ...