"这是一份关于Linux开发的笔记,由达内学员整理,内容涵盖了Linux基础、Unix、C语言以及后续的嵌入式开发,包括裸板和驱动程序的相关知识。笔记以图文并茂的方式呈现,方便学习和理解。"
在这份笔记中,重点讲解了Linux开发中的关键概念和工具,特别是GCC的使用方法。GCC是GNU Compiler Collection的缩写,它是Linux环境下广泛使用的编译器,能够处理C、C++等多种编程语言。GCC的主要功能包括预处理、编译、汇编和连接:
1. 预处理:GCC通过`-E`选项进行预处理,将源代码中的宏展开、条件编译等处理,生成.i扩展名的文件。
2. 汇编:使用`-S`选项,GCC将预处理后的.i文件转换为汇编语言的.s文件。
3. 编译:通过`-c`选项,GCC将汇编文件编译为.o目标文件,但不进行连接。
4. 连接:使用`-o`选项,GCC将多个目标文件连接生成可执行文件。同时,可以使用`-std`设置编程标准,如`-std=c89`或`-std=c99`。
5. 警告提示:`-Wall`选项会显示尽可能多的编译警告信息。
在Linux开发中,还会接触到不同类型的文件:
- `.a`文件是静态库文件,包含一组已编译的目标文件,链接时会被复制到可执行文件中。
- `.o`文件是目标文件,是编译后的中间结果,包含了机器码但未连接。
- `.i`文件是预处理后的源程序,用于查看预处理的结果。
- `.s`文件是汇编代码文件,通常由预处理后的源文件生成。
- `.so`文件是共享库文件,动态链接时使用,节省内存。
此外,笔记还强调了头文件的作用,头文件通常包含函数和数据类型的声明,方便其他源文件引用。预处理指令如`#error`、`#warning`、`#pragma`也在笔记中有所提及,它们可以用于控制编译过程。
编程环境部分,笔记提到了几个重要的环境变量:
- `PATH`:定义了系统查找可执行文件的路径。
- `CPATH`和`C_INCLUDE_PATH`:用于指定C语言头文件的搜索路径。
- `LD_LIBRARY_PATH`:用于动态库的查找路径。
- `LIBRARY_PATH`:与`LD_LIBRARY_PATH`类似,用于库文件的路径。
这些环境变量的设置对于正确编译和运行程序至关重要,特别是在跨平台开发或者自定义库路径的情况下。
笔记还介绍了如何在不同的源文件之间共享全局变量,通过`extern`关键字在需要的地方声明,而在定义处使用`static`关键字可以限制全局变量的作用域,防止其他文件意外访问。
这份笔记提供了Linux开发的基础知识,从GCC的使用到编程环境的配置,对初学者和有一定经验的开发者都具有参考价值。