编译原理及交叉编译

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

编译原理gcc/g++在执行编译的时候,只要分四个阶段:1、预处理阶段,完成宏定义和include文件展开等工作;不生成文件[预处理器cpp]2、根据编译参数进行不同程度的优化,编译成汇编代码;将预处理后的文件转换成汇编语言,生成.s的文件[编译器egcs]3、用汇编器把汇编代码进一步生成目标代码;由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4、用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件;[链接器ld]gcc常用编译选项:-c只生成object文件,不链接-S只把文件编译成为汇编代码-E只运行C预编译器cpp,不生成文件-o生成指定的输出文件-g生成可被gdb使用的标准调试信息-IDIR指定额外的头文件搜索路径DIR-LDIR指定额外的库函数搜索路径DIR-lLIBRARY指定链接时需要的其它函数库“LIBRARY”-w不生成任何警告信息-Wall生成所有级别的警告信息-shared生成支持动态共享库的执行文件-static不支持动态共享库,把函数库内容静态链接到可执行程序中例如:有一Main.c,代码如下:#includeVoidMain(){Printf(“Helloworld!\n”);}编译:第一阶段:gcc–EMain.c//打印出编译信息,但是没有生成任何文件Gccmain.c–E–omain.cpp//生成main.cpp的文件第二阶段:gcc–Smain.c//生成Main.s的汇编文件第三阶段:gcc–cmain.c//生成Main.o的目标文件第四阶段:Gccmain.c//直接生成文件名为默认的a.out的可执行文件Gccmain.c–omain//生成文件名为main的可执行文件系统在编译的时候,会在/usr/include中搜索头文件,在/lib,/usr/lib中搜索库文件gcc优化编译选项:-O0不进行代码优化处理-O,O1进行一般优化,减少大小和时间-O2进一步优化,一般在内核编译时使用[一般建议]-O3较-O2进一步优化gcc可以同时用来编译C程序和C++程序。但gcc只能编译C++源文件,而不能自动和C++程序使用的库链接。因此,通常使用g++完成C++程序的编译和链接.交叉编译要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(crosscompilationtoolchain)然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。什么是EABI?Embeddedapplicationbinaryinterface,即嵌入式应用二进制接口,是描述可连接目标代码,库目标代码,可执行文件影像,如何连接,执行和调试,以及目标代码生成过程,和c,c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础安装交叉编译工具1、复制源码包到Linux系统的目录中(通过smb服务器)2、解压,tarxzvfarm-XXXXXX.gz–C/解压到usr/local/arm目录下3、添加环境变量Vi/etc/profile在exportPATHUSERLOGNAMEMAILHOSTNAMEHISTSIZEINPUTRC后面加上ExportPATH/usr.local/bin/arm/4.3.2/bin:$PATH//在bin中查找可执行文件保存退出Source/etc/profile//让添加的环境变量生效4、交叉编译安装成功5、修改Makefile中的编译器执行arm-linux-gccmain.c–omain//编译

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功