文档详情

Linux基础-gcc编译器.ppt

发布:2017-05-29约4.5千字共36页下载文档
文本预览下载声明
静态库编译与加载 生成源文件的目标机器文件 对目标机器文件进行归档 编译可执行程序并加载静态库,执行main程序,看其效果静态库加载到可执行程序中,只需在编译的时候,跟上需要加载的库名即可 执行结果 动态库 (共享库)编译与加载 生成源文件的目标机器文件 对目标机器文件进行处理,编译出动态库 编译可执行程序并加动态库,执行main程序,看其效果 执行结果: 动态库 (共享库)编译与加载 编译与运行加载的情况不同,我们已经在编译的时候指定过需要加载的库,但是运行的时候为何提示找不到? LINUX下:默认的库加载路径为/lib/ 、 /usr/lib/ 有多种办法解决问题: 将libfun.so拷贝到默认的库目录中(/lib/或/usr/lib/); 设置新的环境变量: export LD_LIBRARY_PATH=./ echo $LD_LIBRARY_PATH 总结 我们使用gcc编译了一个简单的程序,通过该程序引申gcc的四个编译步骤,再对四个编译步骤进行逐一解释。 学习了gcc的一些常用编译选项,有涉及到优化、头文件、连接库、警告、调试等等。 了解了动态库与静态库,用示例演示如何生成动、静态库,并在可执行程序中分别加载它们。 练习 完成本章PPT中所有的代码练习,对 gcc的每一个选都了解。 简述gcc编译流程,并说明编程中每一个步骤产生的中间文件的类型。 Linux基础 – gcc编译器 gcc内容大纳 gcc的简介 如何使用gcc编译一个简单的C程序 gcc的编译流程 gcc的常用编译选项 使用gcc实现多文件编译 使用gcc编译静态库、动态库 学习目标 掌握gcc,掌握gcc的编译过程 知道一些常见的编译错误 多文件编译的方法 了解动态库与静态库的区别 掌握静、动态库的编译方法 gcc的简介 gcc是一个用于linux系统下编程的编译器。 gcc原名为 GNU C compile(语言编译器),因为它原本只能处理 C语言。 gcc 很快地扩展,变得可处理 C++,之后也变得可处理 Pascal、Object-C、Java以及其他语言。 GNU是一个开源项目组,是一个递归的缩写。 GNU : GNU is NOT UNIX gcc的格式 gcc指令的一般格式为: gcc [选项] 要编译的文件 [选项] [目标文件] 其中目标文件可以缺省,缺省情况,生成的可执行文件名为a.out 使用gcc编译一个简单的C程序 使用vi编写一个简单的hello world程序, 并使用gcc编译,缺省情况下编译成功后,会生成可执行文件a.out 我们可以通过gcc的-o选项指定生成的可执行文件名 以上两条命令,实际隐含了四个步骤。 gcc编译流程 使用gcc编译程序的时候 ,实际包含了四个步骤: 预处理(Pre-processing) 读取C语言源文件,对以“#”开头的语句进行处理 编译(Compilation) 对预处理之后输出的文件进行词法分析,试图找出所有不符合语法规则的部份,打印错误或警告。若没有任何语法问题,则将其翻译为功能等价的汇编代码 汇编(Assembly) 把汇编代码翻译成目标机器代码(二进制文件) 链接(Linking) 将一个文件中引用的符号(函数、外部变量等)与该符号在另文件中的定义和实现连接起来,从而使有关的目标文件连成一个整体,最终生成可以被操作系统执行的可执行文件 写一个简单的测试程序 写一个简单的程序gcc-test.c便于我们接下来探讨用,写完之后仔细阅读该代码,了解代码功能,并判断是否有问题: gcc编译流程 – 第一步:预处理 在该阶段,gcc将对以“#“起始的语句进行处理: 将头文件展开 : 将头文件的内容展开至C文件 做宏的替换 : 将源文件中出现的宏做宏值替换。 条件编译的判断 : 根据条件编译选项,加载指定代码 (注:该阶段会删除注释代码) 可以通过gcc的选项-E来单独执行预处理,而不处理其它三个步骤,并生成gcc-test.i的文件: gcc编译流程 – 第一步:预处理 预处理成功后,使用cat 指令查看gcc-test.i的文件信息,并对源文件比较: 以上省略n行 gcc编译流程 – 第一步:预处理 预处理总结: 在预处理时,gcc编译器仅仅做的只是对头文件的展开、宏的替换、条件编译选项的判断,注释删除操作(注:不做语法检测)。 因此,在预处理时,gcc编译器不会出现任何错误提示。即便是非C源代码的普通文本文档,我们也可以使用预处理执行。 gcc编译流程 – 第二步:编译 在这个阶段中,gcc将对所有正文内容进行处理: 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工
显示全部
相似文档