Linux开发

背景

Linux 遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用
Linux 的所有底层源代码,也可以自由地修改和再发布。
由于 Linux 是自由软件,任何人都可以创建一个符合自己需求的 Linux 发行版。

特点

1.遵循GNU/GPL
2.开放
3.多用户
4.多任务
5.安全性高
6.可移植

开发特点

GNU编译工具GCC,支持多种编程语言,包括C,C++,Java....
支持多种平台,包括Unix,Lunix,windows.

开发编译流程

1.编译 vi *.c ,创建相关开发文件
2.预编译 gcc -E *.c -o *.i ,对代码种相关的预编译指令进行相关处理
3. 编译 gcc -S *.i ,将生成相应*.s的汇编文件
4. 汇编 gcc -c *.s ,生成相应的二进制文件,能够被机器所识别
5. 链接 gcc *.o -o * ,生成可以执行文件

文件性质

1.	.h 代码头文件
2.	.c c语言代码文件
3.	.a 静态库文件
4.	.so 动态库文件

编译指令

编译指令详解

预处理指令


1.#include      // 将指定文件的内容插至此指令处
2.#include_next // 与#include一样,但从当前目录之后的目录查找,极少用
3.#define       // 定义宏
4.#undef        // 删除宏
5.#if           // 判定
6.#ifdef        // 判定宏是否已定义
7.#ifndef       // 判定宏是否未定义
8.#else         // 与#if、#ifdef、#ifndef结合使用
9.#elif         // else if多选分支
10.#endif        // 结束判定
11.##            // 连接宏内两个连续的字符串
12.#             // 将宏参数扩展成字符串字面值
13.#error        // 产生错误,结束预处理
14.#warning      // 产生警告
15.#pragma       // 提供额外信息的标准方法,可用于指定平台
16.#pragma GCC dependency <文件>     // 若<文件>比此文件新则产生警告
17.#pragma GCC poison <标识>         // 若出现<标识>则产生错误
18.#pragma pack(1/2/4/8)             // 按1/2/4/8字节对齐补齐
19.#line                             // 指定行号


预定义宏


1.__BASE_FILE__     // 正在编译的源文件名
2.__FILE__          // 所在文件名
3.__LINE__          // 行号
4.__FUNCTION__      // 函数名
5.__func__          // 同__FUNCTION__
6.__DATE__          // 日期
7.__TIME__          // 时间
8.__INCLUDE_LEVEL__ // 包含层数,从0开始
9.__cplusplus       // C++编译器将其定义为1,
10.                  // C编译器不定义该宏

头文件

作用

1.声明外部变量,函数和类
2.定义宏,类型别名和自定义类型
3.包含其他头文件
4.设置头文件卫士,防止同一个头文件被多次包含
	头文件卫士:#ifndef *****	//通过宏定义来判断头文件是否被反复调用
				#define ***
				#endif

include<>和include " "两者需要分清搜索范围,后者范围更大,不仅会在-I指定的目录和系统目录下寻找,还会在当前目录下

头文件使用

1. #include "***/****/****/*.h" ,多级目录下的头文件,这种方式易懂,但是一旦头文件位置发生改变,那么代码中就需要同步修改,不便于开发
2. 通过环境变量C_INCLUDE_PATH或者CPATH来设置C的头文件,这种方式便捷,但是在多工程情况下,可能发生冲突,无法定位到正确的头文件。
3. gcc -I 通过编译指令指定相应的头文件,是最合适的。

你可能感兴趣的:(linux)