1.简单介绍
Linux下的C,C++程序开发,一般都用GCC/G++/GDB工具
将C语言程序编译成可执行文件般都需经过以下4 个步骤。
(1)预处理 : 对源代码文件中的文件包含、宏定义、预编译语句进行分析和替换。
(2)编译(Compilation):根据编译器的语法规则,将高级语言转换为以.s为后缀的汇编语言文件。
(3)汇编(Assembly):将S和s为后缀的汇编语言文件经过预编译和汇编成为以.o为后缀的目标文件。
(4)连接(inkng);,当所有的目标文件都生成之后,将它们安排到可执行程序中恰当的位置上,同时,该程序所调用到的库函数也需要连接到合适的地方。
2.GCC
2.1 GCC信息
在Shell提示符下键入 “ gcc -v”,就会显示目前正在使用的GCC的版本及相关信息。
用rpm -q1 gcc 查看gcc文件信息。
2.2 GCC编译过程
GCC/G++是GNU中C和C+的编译器,其编译格式如下:
gcc [option l filename ]…
g++ [option l filename ]…
其中optins就是编译器所需要的参数, flename是文件名称。Linux 下的C和C++编译器将程序编译成
个可执行 文件需要经过以下4个步骤。
1)预处理(也称预编译):即进行预处理。在预处理过程中,对源代码文件中的文件包含、预编译语
句进行分析,使用-E参数。
2)编译 : 即调用cc进行编译。这个阶段根据输入文件生成以 .s 为后缀的汇编文件,使用-s参数。
3)汇编 : 即调用as进行编译,将.S 和.s为后缀的汇编语言文件汇编成为以 .o 为后缀的目标文件,使
用-c 参数。
4)连接 : 当所有的目标文件都生成之后,调用ld来完成最后的关键性工作,这个阶段就是连接。在连
接阶段,所有的目标文件被安排到可执行程序中恰当的位置上,同时,该程序所调用到的库函数也从
各自所在的档案库中连到合适的地方,使用-0参数。
对源代码文件来说,后缀名控制着缺省设定.
GCC : 认为预处理后的文件(.i)是C文件,并且设定C形式的连接.
G++ : 认为预处理后的文件(.ii)是C++文件, 并且设定c++形式的连接。
3. GDB调试工具简介
GDB比传统的C语言的开发环境具有更加强大的功能。
GDB作为功能强大的调试工具,可完成如下的调试任务。
(I)设置断点。
(2)监视程序变量的值。
(3)程序的单步执行。
(4)修改变量的值。
默认情况下,Linux 系统安装了GDB调试工具。
查看本机GDB版本信息的命令如下:
[root@localhost ch0202]# gdb -V
4.使用GCC编译C程序
-
先使用VIM等工具编辑源代码文件
-
使用gcc -c 命令编译源代码。
-
使用 gcc -o 命令连接程序。
-
./程序名 执行程序
以上步骤可以直接使用 -o 参数一次性完成。
5.使用g++编译c++程序
(假设有一个c++源文件hello.c)
- 编译c++程序。
g++ -c hello.c -Wno-deprecated
-Wno-deprecated 用于忽略头文件信赖的警告
-
连接程序
g++ -o hello hello.o -
执行程序
./hello
可以使用-o参数一步完成。 g++ -o hello hello.c -Wno-deprecated
6.使用GDB调试
1.运行 gdb bug 命令,装入bug可执行文件。
2.使用list 命令查看代码。
3.使用run命令执行程序。
4.使用where命令查看程序出错位置。
5.使用quit命令退出GDB调试器。