GCC的使用:
- gcc 支持编译的一些源文件后缀名
后缀 | 源文件 |
.c | C语言源文件 |
.C .cc .cxx | C++源文件 |
.m | Object-C源文件 |
.i | 经过预处理后的C源文件 |
.ii | 经过预处理后的C++源文件 |
.s .S | 汇编语言源文件 |
.h | 预处理文件(头文件) |
.o | 目标文件 |
.a | 存档文件 |
gcc 编译程序的流程
源文件 -> 预处理 -> 编译 -> 汇编 -> 链接 -> 可执行文件
修改文件权限:
$ chmod (u/g/o)(+/-) filename
例如,chmod u+x test.out
,这样test.out的拥有者就获得了test.out的执行权限
用 gcc 编译一个经典 C 程序
gcc 到底背着我们做了什么
用 gcc 编译模块化的程序
//略
GDB 的使用
gdb 概述
gdb是GNU开发组织发布的一个强大的UNIX/Linux下的程序调试工具。或许,有人比较习惯图形界面方式的,像VC、BCB等IDE环境,但是在UNIX/Linux平台下做软件,gdb这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,gdb主要帮忙用户完成下面4个方面的功能:
- 启动程序,可以按照用户自定义的要求随心所欲的运行程序
- 可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
- 当程序停住时,可以检查此时程序中所发生的事。
- 动态地改变程序的执行环境。
从上面来看,gdb和一般的调试工具区别不大,基本上也是完成这些功能,不过在细节上,会发现gdb这个调试工具的强大。
使用 gdb
gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的
-g
参数即可。如:
$ gcc -g hello.c -o hello
接下来就可以用gdb打开这个可执行文件:
$ gdb hello
Makefile 的使用
Makefile 概述
通过合理有效的划分,将一个项目分解为多个易于处理的文件。
makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作(因为makefile就像一个shell脚本一样,可以执行操作系统的命令)。
makefile带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。make是一个命令工具,是一个执行makefile中命令的工具程序。Makefile 基本规则
首先$ vim Makefile
:
test: prog.o code.o
gcc prog.o code.o -o test
prog.o: prog.c code.h
gcc -c prog.c -o prog.o
code.o: code.c code.h
gcc -c code.c -o code.o
clean:
rm -f *.o test
有了这个Makefile,不论什么时候修改源文件,只要执行一下make命令,所有必要的重新编译将自动执行。make程序利用Makefile中的数据,生成并遍历以test为根节点的树。
- Makefile的一般写法:
- test(目标文件): prog.o code.o(依赖文件列表)
- tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
- ……
$ make
gcc -c prog.c -o prog.o
gcc -c code.c -o code.o
gcc prog.o code.o -o test
还记得Makefile中的clean吗? make clean
就会去执行rm -f *.o test
这条命令,完成 clean 操作。
使用带宏的 Makefile
- 定义宏的格式为:
macroname = macrotext
- 使用宏的格式为:
$(macroname)
例如:
- 定义宏的格式为:
OBJS = prog.o code.o
CC = gcc
test: $(OBJS)
$(CC) $(OBJS) -o test
prog.o: prog.c code.h
$(CC) -c prog.c -o prog.o
code.o: code.c code.h
$(CC) -c code.c -o code.o
clean:
rm -f *.o test
文件IO:
文件 I/O 介绍
Linux中的应用编程接口(API)遵循了UNIX中最流行的应用编程界面标准——POSIX。这些系统调用编程接口主要是通过C库(libc)实现的。
使用Linux操作系统向用户程序提供的API(应用编程接口),访问OS内核提供的服务(包括文件I/O)
基本 API
(1).open
需要包含的头文件:<sys/types.h>
,<sys/stat.h>
,<fcntl.h>
函数原型:
int open(const str * pathname, int oflag, [..., mode_t mode])
功能:打开文件 返回值:成功则返回文件描述符,出错返回-1 参数:(2).read
//TODO
(3).write
(4).close
(5).lseek
本文整理自:实验楼:Linux系统编程
硬广!!!:点我注册 奖励实验豆3枚 ^_^