当前位置:文档之家› linux编程基础2(gcc.gdb,makefile)

linux编程基础2(gcc.gdb,makefile)

GNU C ANSI C (标准 C ) GNU C --支持GNU 扩展的C 语言。GNU CC 对C 语言提供了很多扩展,这些扩展对优化、 目标代码布局、更安全的检查等方面提供了很 强的支持。 Linux 内核代码使用了大量的 GNU C 扩展,以 至于能够编译 Linux 内核的唯一编译器是 GNU CC,以前甚至出现过编译 Linux 内核要使用特 殊的 GNU CC 版本的情况。

命令 x X
说明 删除光标后的字符 删除光标前的字符
功能键 Delete
dd
ndd r
删除光标所在的行
删除包括光标所在行 的n行文本 修改光标所在字符

R s
进入替换状态,直到按Esc回 Insert 到命令模式为止 删除光标所在字符,并进入输 入模式
Linux编程基础


目录
1 2 3 4
Linux开发基础
Linux下的编辑工具
GCC与GDB的使用
Make与Makefile
LINUX 开发基础介绍

Linux 的编程常识 Linux下VIM的使用 编译器GCC的使用 调试器gdb的使用 项目管理工具make的使用

Linuxห้องสมุดไป่ตู้编程环境概述
主要涉及到编辑器、编译链接器、调试器及项目管理工具。 编辑器 Linux 中最常用的编辑器有 Vi(Vim)和 Emacs 编译链接器 在Linux中,最常用的编译器是Gcc编译器。它是GNU推 出的功引导代码能强大、性能优越的多平台编译器. 调试器 Gdb 是绝大多数 Linux 开发人员所使用的调试器,它可 以方便地设置断点、单步跟踪等
vi是Linux最常用的编辑器,Linux里提供的是vi的 加强版——vim,但同VI是完全兼容。 vim进入:
• 在系统提示符下键入命令vim,后面跟上想要编辑 (或者建立)的文件名,VIM 可以自动载入所要编辑 的文件或是开启一个新文件。
VIM的退出:
• 可以在命令行方式下使用命令“:wq”或者“:q!”, 前者的功能是写文件并从VIM中退出,后者的功能是 从VIM中退出,但不保存所作的修改(注意冒号)。
插入模式
• 在命令模式下按“a”、“i”、“o”进入插入模式。
末行命令模式
• 也是一种常用模式,用于输入命令进行文字编辑的 辅助功能。通过冒号“:”进入末行模式。例如 “:q”

vi的常用命令
命令
h I
说明
向左移一个字符 向右移一个字符
功能键
← →
J
k 0 $
向上移一个字符
Vim的图形版本gvim;
二、Linux下VIM的使用
Vi 3种基本工作模式:命令模式、插入模式、末行模式。
二、Linux下VIM的使用
VI 3种基本工作模式: 命令模式下
• 键入的每个字符都被当作一个命令处理。刚启动时, 处于命令模式。在插入模式下按“ESC”,也可以回 到指令模式。

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

Linux 编程环境概述
项目管理器 Linux 中的项目管理器“make” 是一种控制编译 或者重复编译软件的工具。 它还能自动管理软件编译的内容、方式和时机, 使程序员能够把精力集中在代码的编写上而不 是在源代码的组织上。

二、Linux下VIM的使用
GCC编译器的使用
Gcc的编译流程分4个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 每个阶段分别调用不同的工具进行处理。
源 程 序 (*.c)
预处理
编译
汇编
链接
可执行文件
预处理器
编译器
汇编器

命令 A i I
命令说明 从光标所在行最后面的地方开始新增文本 从光标所在位置前面开始插入文本 从光标所在列的第一个非空白字元前面开始插入 文本
o O
在光标所在列下新增一行并进入输入模式 在光标所在列上方新增一行并进入输入模式

命令 :q :q! :w :w filename :wq
向下移一个字符

↓ Home End
移至该行之首 移至该行之末

H M L G
移至窗口的第一行 移至窗口的中间那行 移至窗口的最后一行 移至该文件的最后一行
nG
Ctrl+f Ctrl+b ^
移至该文件的第 n 行
向后翻一页 向前翻一页 移至该行的第一个非空白字 符处 PageDow n PageUp

GCC编译器的使用
GCC 通常gcc后跟一些选项和文件名来使用 GCC 编 译器 gcc [options] [filenames] 其中options就是编译器所需要的参数, filenames给出相关的文件名称 例如:gcc –o hello hello.c
Linux 的编程常识
C 语言编程风格
Linux 内核编程风格
• 缩进:Linux内核缩进风格是8个字符。 • 括号的位置:将开始的大括号放在一行的最 后,而将结束的大括号放在一行的第一位。 • 命名:命名尽量简洁。 • 函数:函数最好短小精悍,而且只能做一件 事。 • 详见: /usr/src/linux/Documentation/CodingStyle
连接器
GCC编译器的使用
源 程 序 (*.c)
预处理
编译
汇编
链接
可执行文件
预处理器
编译器
汇编器
连接器


GCC首先调用预处理程序cpp进行预处理,展开程序代码中 的宏,并在其中插入头文件所包含的内容; 把预处理后的源代码编译产生汇编代码; 调用as汇编器处理这些汇编代码产生目标代码; 通过ld连接器创建二进制可执行文件或者建立库文件。

GCC编译器的使用
GCC(GNU Compiler Collection) GNU CC(简称为 Gcc)是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C、C++ 和 Object C 等语言编写的程序。 Gcc 又是一个交叉平台编译器 在当前CPU平 台上为多种不同体系结构的硬件平台开发软件。 适合在嵌入式领域的开发编译。
GCC编译器的使用
库和头文件的保存位置 函数库 • 预先编译好的函数集合 • /lib:系统必备共享库 • /usr/lib:标准共享库和静态库 • /usr/X11R6/lib:X11R6 的函数库 • /usr/local/lib:本地函数库 头文件 • 程序的设计需要头文件来提供常数的定义和库函数 调用的声明 • /usr/include:系统头文件 • /usr/local/include:本地头文件
GCC编译器的使用
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 gcc hello.c -o hello 执行:./hello

GCC编译器的使用
gcc则通过后缀来区别输入文件的类别。 gcc所遵循的部分 后缀约定规则: .c : C语言源代码文件; .a : 是由目标文件构成的档案库文件; .C,.cc或.cxx : 是C++源代码文件; .h : 是程序所包含的头文件; .i : 是已经预处理过的C源代码文件; .ii : 是已经预处理过的C++源代码文件; .o : 是编译后的目标文件; .s : 是汇编语言源代码文件; .S : 是经过预编译的汇编语言源代码文件。
GCC编译器的使用
GCC 选项 -Idirname,在头文件的搜索路径列表中添加dirname目 录。这个选项的作用是:到指定的dirname目录中去寻 找需要的头文件。 -Ldirname,在库文件的搜索路径列表中添加dirname目 录。在预设状态下,连接程序ld在系统的预设路径中 (如/usr/lib)寻找所需要的档案库文件,这个选项 告 诉连接程序,首先到-L指定的目录中去寻找,然后到系 统预设路径中寻找。 -lname,在连接时,装载名字为“libname.a”的函数 库,该函数库位于系统预设的目录或者由-L选项确定的 目录下。例如,-lm表示连接名为“libm.a”的数学函 数库。
说明 结束编辑 强制离开vi,放弃存盘 存盘 将编辑内容保存为名为filename的文件 存盘并退出

Vim练习
建立一个新文件 输入字符 复制第一行到第二行 复制第一二行到第三行 撤销上面的步骤 删除第二行 保存推出

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