gcc学习记录
-Wall: 使输出中包含警告信息,提示一些可以避免的错误。如果没有错误,则不会输出信息。
-o:后面加上可执行文件的名字。如果不加-o选项,会默认生成a.out可执行文件。举例:gcc -Wall -o circle circle.c。因为加了-o circle,所以会生成circle可执行文件,而不生成a.out.
下面介绍四个过程:预处理,编译,汇编,链接。
1。预处理。
预处理主要是执行预处理指令和扩展宏。gcc一般不产生预处理后的中间输出。可以使用-E来输出预处理得到的结果。
-E:直接使用gcc -E circle.c,产生的结果会在屏幕上输出,输出内容很多。因为它包含了若干头文件的内容。使用gcc -E -o circle.i,产生的结果会重定向到circle.i。file.i表示经过了预处理后的c源文件。加上-C会在预处理的结果中包括注释。gcc -e -C -o circle.i circle.c.
-D name[=definition]: 这个不是很懂,大概是用来条件编译的,需要和#ifdex name一起用。
-U name:也不懂,和上一个有点关系。未定义符号name.
-I directory[:directory[...]]:当在源码中使用#include指令时,会从该目录和系统标准include目录寻找。通常的寻找顺序为:1)该源文件所在目录。2)通过 -I 选项指定的目录。3)环境变量C_INCLUDE_PATH and CPATH指定的目录。4)系统默认include目录。
-I- :这个选项用来分割-I directory,在-I-左边的目录,不适用于带有尖括号的#include指令,比如#inlcude<stdio.h>,就是说在找stdio.h这个文件时,不会在-I-左边的目录中找。-I-左边的目录只适用于带引号的文件,比如#include "myheader.h"。对-I-右边的目录,尖括号和双引号的文件都可以找。当使用 -I - 使,上面的四个寻找步骤中的第一步会忽略。
2。编译。
编译的工作就是把c程序翻译成汇编程序。一般,每个CPU 架构都有自己的汇编语言,所以汇编语言很多。一般情况,gcc把生成的汇编代码存储在临时文件中,但是当汇编开始运行后,会把它给删掉。可以使用-S来查看生成的汇编代码。
-S : -S 会生成以.s结束的 汇编语言文件。gcc -S circle.c, 会生成circle.s文件。
为了在汇编代码中生成包含C 语言变量名的注释,可以使用-fverbose-asm。举例:gcc -S -fverbose-asm circle.c。
3。汇编(或组装)
因为每个机器结构有自己的汇编语言。gcc使用一个汇编器将汇编语言程序转换成可执行二进制文件。结果是对象文件,包含从源文件生成的可执行机器代码和外部链接文件中所有对象对应的符号表。生成的对象文件也是临时的,会在链接时被删除。使用 -c选项来生成对象文件。
-c: 对象文件以.o结尾。gcc -c circle.c.
4。链接
将多个二进制文件链接成一个可执行文件。有三种链接不在gcc搜索范围内的库文件方式。
1) gcc -o circle circle.c /usr/local/lib/libmath.a。库文件链接的方式类似于对象文件。
2)使用-L选项。举例:gcc -o circle -L/usr/local/lib -lmath circle.c. 可以使用多个库目录,这可以用多个-L实现,也可以在目录间加,分隔实现。
3)使包含库的目录包含在环境变量LIBARY_PATH中。
综上,
-save-temps: 会保存所有中间文件。
-fsyntax-only: 仅检查语法是否正确,不做预处理、编译等操作。
3)
gcc学习记录的更多相关文章
- gcc学习记录2——多输入文件
首先有两个.c文件:circle.c和circulararea.c. 分别对两个源文件生成目标文件,circle.o和circulararea.o. gcc -c circle.c circularr ...
- 【golang学习记录】环境搭建
[golang学习记录]环境搭建 一. 概述 本文是[golang学习记录]系列文章的第一篇,安装Go语言及搭建Go语言开发环境,接下来将详细记录自己学习 go 语言的过程,一方面是为了巩固自己学到的 ...
- GCC学习(1)之MinGW使用
GCC学习(1)之MinGW使用 因为后续打算分享一些有关GCC的使用心得的文章,就把此篇当作一个小预热,依此来了解下使用GNU工具链(gcc.gdb.make等)在脱离IDE的情况下如何开发以及涉及 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
随机推荐
- HDU2612 BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 , 一道比较简单的广搜(BFS)题目. 算法: 设置两个dist[][]数组,记录Y和M到几个K ...
- java常用框架总结
一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...
- hdu-1272 小希的迷宫---并查集或者DFS
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 题目大意: Problem Description 上次Gardon的迷宫城堡小希玩了很久(见 ...
- Problem C: 动态规划基础题目之数字三角形
Problem C: 动态规划基础题目之数字三角形 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 208 Solved: 139[Submit][Sta ...
- Echarts样式
Echarts设置样式如下 <div id="main" style="width: 250px;height:200px;"></div&g ...
- 破解studio 3T
方法一: 打开注册表:regedit 计算机\HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise 将里面得数据清零,又是 ...
- 八、Linux 用户和用户组管理
Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...
- php v8js
本文整理自大神 Corz 1.php56 /datas/soft/php56/bin/php -v PHP (cli) #https://blog.csdn.net/lzm198707/article ...
- Redis之List类型操作
接口: package com.net.test.redis.base.dao; import java.util.List; /** * @author *** * @Time:2017年8月10日 ...
- python代码notepad++不变色问题。
原来是文档后缀名是.txt造成的,应该改成.py,疏忽了...