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,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
随机推荐
- WPS去掉英语单词下面的红斜线
我们在使用WPS的时候,经常会用到英语但是,但是在编码的时候,有些单词是缩写形成的,WPS就会自动验证,产生红色波浪线,提示我们单词写错的问题,那看起来就显得很不美观别扭 那么我们不想要这个红斜杠,怎 ...
- 又一次摔MFC坑里了
因为公司的个项目最近开始写MFC了,又遇到一个坑爹的问题,使用的View视图模式在VS2010中创建的工程,默认就带入了许多的Style,例如Office 2007的许多漂亮样式确实很方便,但是同样也 ...
- URL跨项目调用方法,获取返回的json值,并解析
package com.mshc.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...
- 【BZOJ1029】[JSOI2007] 建筑抢修(堆优化贪心)
点此看题面 大致题意: 有N个受到严重损伤的建筑,对于每个建筑,修好它需要\(T1\)秒,且必须在\(T2\)秒之前修完(\(T1\)与\(T2\)不是固定值),问你最多能修好几个建筑. 题解 一看到 ...
- python 数据库操作 SQLite、MySQL 摘录
转自: http://www.cnblogs.com/windlaughing/p/3157531.html 不管使用什么后台数据库,代码所遵循的过程都是一样的:连接 -> 创建游标 -> ...
- 【转】iOS开发之压缩与解压文件
ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单方法:从http://code.google.com/p/ziparch ...
- 什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?
SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和 SATD(Sum of Absolute Transformed Di ...
- dn.net/blueheart20/article/details/22080489
dn.net/blueheart20/article/details/22080489
- C#创建和使用ActiveX组件
开发基于.Net平台上的程序员是很难从本质上把Visual C#和ActiveX组件联起来,虽然在使用Visual C#开发应用程序时,有时为了快速开发或者由于.Net FrameWork SDK的不 ...
- 【转】C++ 值传递、指针传递、引用传递详解
而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角 ...