嵌入式linux运行编译器,gcc编译器的使用

gcc简介

GCC是GNU项目的编译器组件之一,也是GNU最具有代表性的作品。在GCC设计之初仅仅作为一个C语言的编译器,可是经过十多年的发展,GCC已经不仅仅能支持C语言;它现在还支持Ada语言、C++语言、Java语言、ObjectiveC语言,Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言,等等。而GCC也不再单是GNU C Compiler的意思,而是GNU Compiler Collection也即是GNU编译器家族的意思了,目前已经成为Linux下最重要的编译工具之一。     GCC是一个交叉平台的编译器,目前支持几乎所有主流CPU处理器平台,它可以完成从C、C++、Objective C等源文件向运行在特定cpu硬件上的目标代码的转换,GCC不仅功能非常强大,结构也异常灵活,便携性(protable)与跨平台支持(cross-plantform. support)特性是GCC的显着优点。

实验目的:

学会使用GCC编译器

实验要求:

编写一应用程序,使用GCC进行编译并分别使用-o,-g,-static,-o2等项。

实验步骤:

1.先使用vi编辑hello.c文件,内容如下图所示: 此处输入图片的描述

2.GCC指令的一般格式为:gcc[选项]要编译的文件[选项][目标文件]

例使用GCC编译命令编译hello.c并生成目标文件hello,并运行hello。如图,

命令:

gcc hello.c -o hello

此处输入图片的描述 上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、链接一步完成,下面将分别介绍这四个步骤。

3.-E的作用

只进行预处理,不做其他处理

例:只对hello.c进行预处理,生成文件hello.i,并查看,如图,

命令:

gcc -E hello.c -o hello.i

此处输入图片的描述

使用命令:#cat hello.i 查看生成文件内容。如图, 此处输入图片的描述

可以看到头文件包括部分代码#include经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。

4.-S的作用

只是编译不汇编,生成汇编代码。如图,

例:将hello.i文件只进行编译不进行汇编生成汇编代码hello.s

命令:

gcc -S hello.i -o hello.s

此处输入图片的描述

可使用命令:#cat hello.s查看生成文件内容,如图, 此处输入图片的描述

5.-c的作用

只编译不链接,生成目标文件.o, 如图,

例:将汇编代码hello.s只编译不链接生成hello.o

命令:

gcc -c hello.s -o hello.o

此处输入图片的描述

6.将编译好的hello.o链接成库生成可执行文件hello,如图,

命令:

gcc hello.s -o hello.o

此处输入图片的描述

7.-static的作用

链接静态库

例:比较hello.c链接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小。如图,

命令:

gcc hello.c -o hello

gcc hello.c -static -o hello1

此处输入图片的描述

可以看到静态链接的可执行文件hello1比动态链接的可执行文件hello要大得多,但他们的执行效果是一样的。

8.-g的作用

在可执行程序中包含标准调试信息,如图,

例:将hello.c编译成包含标准调试信息的可执行文件hello2

命令:

gcc -g hello.c -o hello2

此处输入图片的描述

注:带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误。

9.-O2的作用

完成程序的优化工作,如图,

例:将hello.c使用优化选项O2编译生成可执行文件hello1和正常编译生成的可执行文件hello进行比较。

命令:

gcc -O2 hello.c -o hello1

fBo0bietU0UD4KRxdF5Do0UMsfPqsMLHqfX62UAm-wm

lfwgWUe8V1Ona7oatwHxkTE8owdqm7Qsu12FemiN-wm

w0GyTVhHCMFzUpPrFnJqD1MYSUxivrgVKuThq1ZF-wm

rjH9VUvll6cP9LPlLdrHCbhtVzaiLTNIcX9REm85-wm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值