在本篇Linux实验报告中,主要探讨了三个关键知识点:C语言编译、GDB调试工具的使用以及Make工具和Makefile的编制。这些是Linux操作系统下进行软件开发的基础技能。
1. **C语言编译**:
使用GCC(GNU Compiler Collection)是Linux下编译C语言程序的标准方式。实验中通过不同选项来编译`hello.c`程序,例如:
- `-l`:链接指定的库,如`-ltestI`将链接名为`libtestI.a`或`libtestI.so`的库。
- `-D`:定义宏,如`-DDOPTION='"testing"'`会在编译时替换所有的`DOPTION`为`"testing"`。
- `-E`:预处理阶段,仅执行预处理器cpp的处理,不进行编译和汇编。
- `-c`:编译阶段,只编译源文件,生成.o目标文件。
- `-o`:指定输出文件名,如`gcc -o a.out hello.o`将生成的可执行文件命名为`a.out`。
2. **GDB调试工具**:
GDB是GNU Debugger的缩写,是Linux下的一个强大的源代码级调试器。通过GDB可以设置断点、单步执行、查看变量值、跟踪调用栈等,帮助开发者找出程序中的错误。实验中,通过`gdb badprog`命令启动调试,然后使用`run`命令运行程序,`break`设置断点,`print`打印变量值等。
3. **Make工具与Makefile**:
Make是用于自动化构建项目的工具,Makefile是它的配置文件,定义了如何编译、链接以及执行程序。实验中,编写了一个包含多个文件的C语言程序,并创建了Makefile来管理编译过程。例如,Makefile可能包含规则如:
```
all: program
program: file1.o file2.o
gcc -o program file1.o file2.o
file1.o: file1.c
gcc -c -o file1.o file1.c
file2.o: file2.c
gcc -c -o file2.o file2.c
clean:
rm -f *.o program
```
上述Makefile表示`all`目标是构建`program`,`program`依赖于`file1.o`和`file2.o`,每个`.o`文件由相应的`.c`文件编译生成。`clean`目标用于清除生成的中间文件和可执行程序。
在实验过程中遇到的问题,如`makefile:2: *** 遗漏分隔符 。 停止`,通常是Makefile语法错误,可能缺少制表符或冒号。解决方法是在命令前添加Tab键,确保符合Makefile的语法规范。此外,不要给Makefile文件添加`.mk`或`.make`等后缀,以免导致执行错误。
实验还强调了在执行程序时,可能需要在命令前加上`.`或`./`,因为Linux系统通常不将当前目录加入到PATH环境变量中,因此直接输入程序名可能无法找到。
本实验旨在让学生熟悉Linux开发环境中常用的命令和工具,掌握C程序的编译、调试和维护流程,为今后的软件开发奠定坚实基础。通过实践,学生能更好地理解和运用这些基本概念,提高问题解决能力。