GCC 技术参考大全 PDF 文档
本书内容特色:
- 在各种 UNIX 平台(包括 Linux 和 BSD)上开发和部署软件·安装并使用自己的编译器编译 C、C++、Objectivec、Fortran、Java 和 Ada
- 为众多平台生成本地可执行代码虽然在当今的计算机界中,正在进行的自由软件运动不一定是最重要的,但我们确实正处于一个巨大的变革的中心。
- 软件的所有权正在由公司专有变为可根据任何目的自由获取和使用。
目前,自由软件不仅包括程序语言编译程序和连接程序,而且还有大量的工具,图形化的用户界面环境,甚至包括整个操作系统。除此之外,还有一个事实就是所有的自由软件都是由 GCC 编译的,因此可否将 GCC 称作软件世界中最重要的一部分也就值得探讨了。
当然,有很多种语言可用于编写程序,这些语言也都有很多编译程序,但这些编译程序中的绝大部分都是由 GCC 编写成并编译的。从某些方面来看,所有的自由软件都源起于 GCC。有些计算机公司已经开始放弃自己的编译程序而选择简单安装 GCC 编译程序了。
使用 GCC 是免费的,而且还能得到持续的功能扩展和维护。伴随着最近加入 GCC 家族的两种语言:Java 和 Ada:GCC 编译程序的羽翼扩展得更大更广了。这使得 GCC 可用的语言达到 6 种:C、C++、Objective-C、Fortran、Java 和 Ada。而且它还在不断地开发其他语言,例如 COBOL,如果有足够支持就会将这些语言也加入 GCC。
第 1 部分 自由软件编译程序
第 1 章 GCC 简介 3
1.1 GNU 3
1.2 测量编译程序 4
1.3 命令行选项 4
1.4 平台 5
1.5 编译程序的功能 6
1.6 语言 7
1.6.1 C 是基本语言 7
1.6.2 C++:第一个附加语言 7
1.6.3 Objective-C 8
1.6.4 Fortran 8
1.6.5 Java 8
1.6.6 Ada 8
1.6.7 不再支持 Chill 9
1.7 部分列表 9
1.8 联系方式 11
第 2 章 查询与安装编译程序 14
2.1 二进制代码下载 15
2.2 FTP 资源下载 15
2.3 CVS 资源下载 17
2.3.1 以前的发布版 18
2.3.2 测试版 18
2.4 编译和安装 GCC 19
2.4.1 安装过程 19
2.4.2 配置选项 20
2.5 binutils 29
2.6 Win32 二进制安装 31
2.6.1 Cygwin 31
2.6.2 安装 31
2.7 运行测试包 32
第 2 部分 使用编译程序集合
第 3 章 预处理程序 37
3.1 指示字 37
3.1.1 #define 38
3.1.2 #error 和#warning 41
3.1.3 #if,#elif,#else 和#endif 41
3.1.4 #ifdef,#else 和#endif 42
3.1.5 #include 43
3.1.6 #include_next 44
3.1.7 #line 44
3.1.8 #pragma 和_Pragma 45
3.1.9 #undef 46
3.1.10 ## 46
3.2 预定义宏 47
3.3 只包含一次头文件 49
3.4 在出错消息中包含定位信息 50
3.5 去掉适当位置的源代码 50
3.6 产生 make 程序的描述文件 51
3.7 命令行选项和环境变量 51
第 4 章 编译 C 程序 53
4.1 编译基础 53
4.1.1 单源程序到可执行程序 54
4.1.2 源文件到目标文件 54
4.1.3 多源文件到可执行文件 55
4.1.4 预处理 55
4.1.5 生成汇编语言 56
4.1.6 创建静态库 56
4.1.7 创建共享库 57
4.1.8 重写命名约定 58
4.2 标准 59
4.3 C 语言扩展 59
4.3.1 对齐 60
4.3.2 匿名联合 60
4.3.3 变长数组 61
4.3.4 零长度数组 61
4.3.5 属性 63
4.3.6 返回值的复合语句 68
4.3.7 条件操作数省略 69
4.3.8 枚举不完全类型 70
4.3.9 函数参数构造 70
4.3.10 函数内嵌 71
4.3.11 函数名 72
4.3.12 函数嵌套 72
4.3.13 函数原型 73
4.3.14 函数返回地址和堆栈框架 74
4.3.15 标识符 74
4.3.16 整数 75
4.3.17 更换关键字 75
4.3.18 标识地址 75
4.3.19 局部标识声明 76
4.3.20 左值表达式(lvalue) 77
4.3.21 具有可变参数的宏 77
4.3.22 字符串 78
4.3.23 指针算法 78
4.3.24 Switch/Case 分支语句 78
4.3.25 typedef 名字创建 79
4.3.26 typeof 引用 80
4.3.27 联合强制类型转换 80
第 5 章 编译 C++程序 82
5.1 编译基础 82
5.1.1 单源文件到可执行文件 82
5.1.2 多源文件到可执行文件 83
5.1.3 源文件到目标文件 84
5.1.4 预处理 85
5.1.5 生成汇编语言 85
5.1.6 创建静态库 85
5.1.7 创建共享库 87
5.2 C++语言的扩展功能 89
5.2.1 属性 89
5.2.2 头文件 90
5.2.3 函数名 90
5.2.4 接口与实现 91
5.2.5 操作符<?和>? 92
5.2.6 约束 93
5.3 编译程序操作 94
5.3.1 库 94
5.3.2 mangling 名字 94
5.3.3 连接 97
5.3.4 编译模板实例化 98
第 6 章 编译 Objective-C 99
6.1 编译基础 99
6.1.1 单独源文件到可执行程序 99
6.1.2 编译对象 100
6.1.3 创建静态连接库 102
6.1.4 创建共享库 104
6.2 Objective-C 的简要介绍 105
6.2.1 预定义类型 105
6.2.2 创建接口声明 106
6.2.3 命名和 mangling 106
第 7 章 编译 Fortran 程序 108
7.1 编译基础 108
7.1.1 单独源文件到可执行程序 108
7.1.2 多源文件到可执行程序 109
7.1.3 生成汇编语言 110
7.1.4 预处理 110
7.1.5 创建静态库 112
7.1.6 创建共享库 113
7.2 Ratfor 113
7.3 GNU Fortran 扩展功能与变量 115
7.3.1 内在函数 115
7.3.2 源代码格式 115
7.3.3 注释 116
7.3.4 美元符号 116
7.3.5 大小写敏感 116
7.3.6 特殊 Fortran 90 功能 118
第 8 章 编译 Java 123
8.1 编译基础 123
8.1.1 单一源文件到二进制可执行
程序 124
8.1.2 单一源文件到类文件 124
8.1.3 单一源文件到二进制目标文件 125
8.1.4 类文件到本地可执行程序 125
8.1.5 多源文件到二进制可执行文件 125
8.1.6 多输入文件到可执行程序 127
8.1.7 生成汇编语言 127
8.1.8 创建静态库 128
8.1.9 创建共享库 129
8.1.10 创建 Jar 文件 129
8.2 Java 工具 130
8.2.1 gij 130
8.2.2 jar 131
8.2.3 gcjh 132
8.2.4 jcf-dump 134
8.2.5 jv-scan 134
8.2.6 jv-convert 135
8.2.7 grepjar 136
8.3 RMI 137
8.3.1 rmic 138
8.3.2 rmiregistry 139
8.4 属性 139
第 9 章 编译 Ada 程序 141
9.1 安装 141
9.2 编译基础 143
9.2.1 单独源文件到可执行程序 144
9.2.2 多源文件到可执行程序 145
9.2.3 源代码到汇编语言 146
9.3 选项 146
9.4 Ada 工具 150
9.4.1 gnatbind 150
9.4.2 gnatlink 153
9.4.3 gnatmake 153
9.4.4 gnatchop 155
9.4.5 gnatxref 156
9.4.6 gnatfind 157
9.4.7 gnatkr 158
9.4.8 gnatprep 158
9.4.9 gnatls 159
9.4.10 gnatpsys 和 gnatpsta 161
第 10 章 混合语言 162
10.1 C++和 C 的混合 162
10.1.1 在 C++中调用 C 162
10.1.2 在 C 中调用 C++ 163
10.2 混合 Objective-C 和 C 164
10.2.1 在 Objective-C 中调用 C 164
10.2.2 在 C 中调用 Objective-C 165
10.3 混合 Java 和 C++ 166
10.3.1 创建 Java 字符串并调用静态
方法 167
10.3.2 加载并实例化 Java 类 168
10.3.3 异常 170
10.3.4 CNI 的数据类型 171
10.4 混合 Java 和 C 171
10.4.1 具有本地方法的 Java 类 172
10.4.2 向本地方法传递参数 173
10.4.3 在 C 代码中调用 Java 类方法 175
10.5 混合 Fortran 和 C 177
10.5.1 从 Fortran 中调用 C 177
10.5.2 从 C 中调用 Fortran 178
10.6 混合 Ada 和 C 179
10.6.1 从 Ada 中调用 C 180
10.6.2 从 Ada 中调用 C(带参数) 181
第 11 章 国际化 184
11.1 翻译的例子 184
11.2 创建新的.po 文件 186
11.3 函数 gettext()的用法 189
11.3.1 静态字符串 189
11.3.2 从其他域中进行翻译 189
11.3.3 从其他域到指定类别的翻译 190
11.3.4 多重模式 190
11.3.5 来自其他域的多重模式 190
11.3.6 某个类别其他域的多重模式 190
11.4 合并两个.po 文件 190
11.5 由.po 文件生成二进制的.mo 文件 192
第 3 部分 外设和内设
第 12 章 连接和库 197
12.1 目标文件和库 197
12.1.1 目录中的目标文件 197
12.1.2 静态库中的目标文件 198
12.1.3 动态库中的目标文件 200
12.2 连接程序的前端 200
12.3 定位库 201
12.3.1 在连接时定位库 201
12.3.2 运行时载入库 201
12.4 从共享库中载入函数 202
12.5 使用目标文件和库的工具程序 204
12.5.1 配置查找共享库 204
12.5.2 列举目标文件中的符号名 205
12.5.3 去除目标文件中的无用信息 207
12.5.4 列出共享库的依赖关系 208
12.5.5 显示目标文件的内部结构 209
第 13 章 使用 GNU 调试器 212
13.1 调试信息格式 212
13.1.1 STABS 212
13.1.2 DWARF 213
13.1.3 COFF 213
13.1.4 XCOFF 214
13.2 编译调试用程序 214
13.3 将程序载入调试器 215
13.4 执行事后检查 219
13.5 将调试器附带到运行程序上 220
13.6 命令总结 223
第 14 章 make 和 Autoconf 225
14.1 make 225
14.1.1 内部定义 227
14.1.2 如何编写 makefile 228
14.1.3 make 的选项 229
14.2 Autoconf 232
第 15 章 GNU 汇编器 237
15.1 用命令行进行汇编 237
15.2 绝对、相对以及边界 239
15.3 内嵌汇编 240
15.4 汇编器指示字 243
第 16 章 交叉编译及窗体端口 254
16.1 目标机 254
16.2 创建交叉编译程序 255
16.2.1 安装本地编译程序 255
16.2.2 为目标机器建立 binutils 256
16.2.3 安装目标机器的文件 257
16.2.4 可配置库 libgcc1.a 257
16.2.5 构造交叉编译程序 257
16.2.6 运行交叉编译程序 258
16.3 MinGW 258
16.4 Cygwin 259
16.4.1 编译简单的 Cygwin 操作台
程序 259
16.4.2 编译 Cygwin GUI 程序 260
第 17 章 嵌入式系统 261
17.1 建立编译程序和连接程序 261
17.2 选择一种语言 262
17.3 GCC 嵌入工具 263
17.3.1 命令行选项 263
17.3.2 诊断 264
17.3.3 汇编器代码 264
17.4 库 264
17.4.1 整顿标准库 265
17.4.2 为嵌入式系统设计的库 265
17.5 GNU 连接程序脚本语言 265
17.5.1 脚本例子 1 266
17.5.2 脚本例子 2 267
17.5.3 其他脚本命令 268
第 18 章 编译程序输出 269
18.1 程序信息 269
18.1.1 解析树 269
18.1.2 头文件 270
18.1.3 程序需要的内存 271
18.1.4 时耗 272
18.1.5 C++中间树 272
18.1.6 C++类层次 273
18.2 有关 makefile 的信息 273
18.3 编译程序信息 274
18.3.1 编译时间 275
18.3.2 子进程开关 275
18.3.3 详细的编译程序调试信息 276
18.4 关于文件和目录的信息 279
第 19 章 实现一种语言 280
19.1 从前到后 280
19.2 词法扫视 281
19.2.1 简单的词法扫视程序 282
19.2.2 Lex 的正则表达式 282
19.3 语法分析 283
19.4 创建解析树 288
19.5 连接后端与前端 289
第 20 章 寄存器传送语言 292
20.1 RTL insn 292
20.1.1 6 种基本表达式代码 292
20.1.2 insn 的类型和内容 294
20.2 模式和模式类 310
20.3 标志 312
第 21 章 机器相关的编译程序选项 314
21.1 机器列表 314
21.2 GCC 命令行选项 315
21.2.1 Alpha 选项 315
21.2.2 Alpha/VMS 选项 320
21.2.3 ARC 选项 320
21.2.4 ARM 选项 320
21.2.5 AVR 选项 325
21.2.6 CRIS 选项 326
21.2.7 D30V 选项 329
21.2.8 H8/300 选项 330
21.2.9 HPPA 选项 330
21.2.10 IA-64 选项 332
21.2.11 Intel 386 和 AMD x86-64 选项 334
21.2.12 Intel 960 选项 339
21.2.13 M32R/D 选项 340
21.2.14 M680x0 选项 341
21.2.15 M68HClx 选项 344
21.2.16 M88K 选项 344
21.2.17 MCore 选项 347
21.2.18 MIPS 选项 348
21.2.19 MMIX 选项 354
21.2.20 MN10200 选项 355
21.2.21 MN10300 选项 355
21.2.22 NS32K 选项 356
21.2.23 PDP-11 选项 358
21.2.24 RS/6000 和 PowerPC 选项 359
21.2.25 RT 选项 368
21.2.26 S/390 和 zSeries 选项 369
21.2.27 SH 选项 370
21.2.28 SPARC 选项 372
21.2.29 System V 选项 376
21.2.30 TMS320C3x/C4x 选项 376
21.2.31 V850 选项 379
21.2.32 VAX 选项 380
21.2.33 Xstormy16 选项 380
第 4 部分 附录
附录 A GNU 通用公共许可证 383
附录 B 环境变量 389
附录 C 命令行对照表 393
附录 D 命令行选项 400
D.1 选项前缀 400
D.1.1 命令行的顺序 401
D.1.2 文件类型 401
D.2 选项字母顺序列表 402
附录 E 术语表 480
下载地址:https://www.wenjiangs.com/wp-content/uploads/2023/07/sFfN1aGJy79muDxo.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论