欢迎来到天天文库
浏览记录
ID:1709451
大小:526.50 KB
页数:36页
时间:2017-11-13
《3-gcc及makefile_ver0.2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、GCC及Makefile胡再刚R&DService交付中心课程内容GCC及Makefile能力要求初步了解Linux操作系统的相关知识培养目标了解GCC的原理,能用GCC编译简单程序了解Makefile基本规则会写简单的Makefile会搭建嵌入式交叉编译环境课程简介2目录第一章:GCC介绍及使用第二章:Makefile第三章:Linux进程管理第四章:嵌入式开发环境搭建3第一章:GCC介绍及使用1.1GCC是什么1.2GCC的版本1.3GCC编译过程1.4GCC常用编译参数1.5GCC应用程序举例1.6GCC编译方法1.7静态库1.8动态库41.1GCC是什么GCC的全称GNUCCom
2、pilerGNUCompilerCollection支持多语言、多平台的开源编译器C/C++/ObjectiveC/Fortran/Ada9X/Fortran/Modula-3/Pascal/Mercury…MX680x0/VAX/SPARC/Convex/AMD29K/ARM/Thumb/RS6000/MIPS/ix86/HPPA/i960/DecAlpha/Clipper/SH…其他未公布的前端、后端GCC的目标为GNU系统运行的平台(按8位字节寻址的、有数个通用寄存器的32位机器)提供优秀、快速的编译器51.2GCC的版本GCC是由理查德·马修·斯托曼在1985年开始以Pastel
3、语言所写。由于是不可移植的,由斯托曼和LenTower在1987年以C语言重写并成为GNU专案的编译器1987年,第一版的GCC发布2001.6.18,GCC3.0正式发布2004.4.20,GCC3.4.0版本发布2005.4.22,GCC4.0版本发布现在最新的Release版本为GCC4.6.0安装了GCC的系统中,在shell的提示符下键入gcc-v显示当前使用的gcc的版本GCC官方网站:http://gcc.gnu.org61.3GCC编译过程gcc/g++在执行编译工作的时候,总共需要4步,预处理、编译、汇编、连接预处理:GCC会调用cpp程序来分析各种宏指令,如#defi
4、ne、#if、#include等编译:根据输入文件产生汇编语言指令。由于通常情况下是立即调用汇编程序as,所以输出一般不保存在文件中,可以使用-S选项强制输出源程序的汇编版本汇编:这一阶段将汇编语言源程序作为输入,生成.o目标文件链接:这是最后一个阶段。该阶段中,各个.o模块被链接在一起构成可执行文件。71.4GCC常用编译参数-1-c只编译,不连接成为可执行文件通常用于编译不包含主程序的子程序文件-ooutput_filename确定输出文件名称为output_filename,同时这个名称不能和源文件同名如果没有此选项,gcc就给出预设的可执行文件a.out-g产生符号调试工具(GN
5、U的gdb)所必要的符号资讯-O对程序进行优化编译、连接采用此选项,整个源代码会在编译、连接过程中进行优化处理,产生的可执行文件执行效率更高,但是,编译、连接的速度相应要慢一些81.4GCC常用编译参数-2-O2比-O更好的优化编译、连接;编译和连接过程会更慢-Idirname将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数C程序中的头文件包含两种情况:A)#includeB)#include“myinc.h”对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件对于B类,cpp在当前目录中搜寻头
6、文件,如果没有找到,就到指定的dirname目录中去寻找91.4GCC常用编译参数-3-Ldirname将dirname所指的目录加到程序函数档案库文件的目录列表中,是在连接过程中使用的参数此选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径(如/usr/lib)中寻找如果函数库存放在多个目录下,就需要依次使用此选项,给出相应的存放目录-lname连接名为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下例如:-lm表示连接名为“libm.a”的数学函数库更为详尽的资料可以参看Linux系统的联机帮助101.5GCC应用举例#includ
7、eintmain(void){printf("hellogcc!");return0;}编译:$gcchello.c-ohello运行:$./hello结果:输出“hellogcc!”示例源程序---hello.c111.6GCC编译方法1.gcchello.c生成a.out2.gcc-ohellohello.c生成hello3.gcc-O-ohellohello.c生成hello4.gcc-O2-ohello
此文档下载收益归作者所有