常用的工具GCC GDB Make Makefile

系统调用
系统调用是操作系统提供给外部应用程序的一组特殊的接口。
应用程序通过这组特殊“接口”来获得操作系统内核提供的服务。
在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成,

这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及返回值用 C 语言的函数调用过程实现。

应用编程接口API
程序员并不是直接使用系统调用。
程序员调用的是函数库中定义的应用编程接口API。
也就是,通过应用编程接口,使用系统调用,请求内核服务。
一个API可能对应几个系统调用。
通过系统调用就可以请求内核服务。

Gcc的编译流程
预处理阶段: gcc –E hello.c –o hello.i
编译阶段: gcc –S hello.i –o hello.s
汇编阶段:gcc –c hello.s –o hello.o
链接阶段:gcc hello.o –o hello
执行:./hello

GCC的选项
GCC 有超过100个的编译选项可用. 主要包括编译处理选项、警告选项、出错选项、优化选项、体系结构选项。
 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译. GCC 产生的汇编语言文件的缺省扩展名是 .s .

-g,产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

时间: 2024-08-07 09:42:46

常用的工具GCC GDB Make Makefile的相关文章

GCC,GDB,Makefile和IO复用函数

2015.1.22 c高级的环境搭建:GCC编译器:全称 GUN CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 GCC编译分为四个步骤:(用WC命令可以分别查看每个阶段代码的大小,可以比较一下,ls -l 也能看出大小) 1.预处理 ->cpp预处理文件*.i gcc -E2.编译 ->cc1汇编文件*.s gcc -S3.汇编 ->as汇编文件*.o gcc -c4.链接 ->ld可执行文件*

gcc gdb makefile学习笔记

一.gcc (GNU C compiler )1.预处理  gcc -E aaa.c  -o aaa.i   →  .i(c代码)    ↓ 2. 编译   gcc -S aaa.i  -o aaa.s   →   .s(汇编代码)    ↓3. 汇编   gcc -c  aaa.s  -o aaa.o  →   .o(目标代码-二进制)    ↓4. 链接   gcc aaa.o    -o aaa    →   aaa(可执行文件) 优化编译链接   gcc -O(O2/O3) aaa.o

实例学习gcc+gdb+make

1 小侃GCC 在正式使用gcc之前,我们先来侃侃gcc是啥玩意儿? 历史 现在的GCC是GNU Compiler Collection的简称,既然是Collection,就是指一些工具链的集合. 最初的GCC(当时还只有C编译器,GCC还是GNU C Comiler的简写)是由Richard Stallman开发的,Stallman也是GNU工程的首创者,那时还是在1984年. 随着程序设计语言的发展,GCC逐渐开始支持C语言之外的语言,如C++.Objective-C.Java.Fortra

GCC&&GDB在OI中的介绍

序言 这本来是用Word写的,但是后来我换了系统所以只能用markdown迁移然后写了...... $\qquad$本文主要投食给那些在Windows下活了很久然后考试时发现需要用命令行来操作时困惑万分以及觉得GDB很好吃的人 $\qquad$以及---- $\qquad$经常眼瞎看不见i++和j++的区别 $\qquad$经常访问a[-1]然而使编译器无可奈何(除非在使用O2的情况下的明显访问越界)的人 ... $\qquad$正式地说,本文介绍GCC&&GDB命令在OI中的应用. 提要

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc.下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家. 在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段: 1. 预处理(Pre-Processing) 2. 编译(Compiling) 3. 汇编(Assembling) 4. 链接(Linking) Linux程序员可以根据自己的需要让 GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或

学习的例子gcc+gdb+make

1 小侃GCC 在正式使用gcc之前,我们先来侃侃gcc是啥玩意儿? 历史 如今的GCC是GNU Compiler Collection的简称.既然是Collection,就是指一些工具链的集合. 最初的GCC(当时还仅仅有C编译器,GCC还是GNU C Comiler的简写)是由Richard Stallman开发的,Stallman也是GNUproject的首创者.那时还是在1984年. 随着程序设计语言的发展,GCC逐渐開始支持C语言之外的语言,如C++.Objective-C.Java.

RAC 常用维护工具和命令(oracle 10g)

Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs_stat 下面分别来介绍这些命令. 一. 节点层 只有一个命令: osnodes, 这个命令用来显示集群点列表,可用的参数如下,这些参数可以混合使用. [[email protected] bin]# ./olsno

java中常用的工具类(二)

下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Android常用的工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S