×

gcc编译器实验报告心得 编译

gcc编译器实验报告心得(有谁比我悲催,在linux下编译个gcc编译了两个月都没成功)

admin admin 发表于2023-12-11 04:33:07 浏览38 评论0

抢沙发发表评论

大家好,gcc编译器实验报告心得相信很多的网友都不是很明白,包括有谁比我悲催,在linux下编译个gcc编译了两个月都没成功也是一样,不过没有关系,接下来就来为大家分享关于gcc编译器实验报告心得和有谁比我悲催,在linux下编译个gcc编译了两个月都没成功的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

有谁比我悲催,在linux下编译个gcc编译了两个月都没成功

没弄成是你不诚心弄,跟着我说的方法做1.下载镜像  例如:redhat-rhel-server-6.8-x86_64-dvd.iso2.在虚拟机上安装环境3.因为红帽的系统什么都没装,所以要自己安装编译工具gcc  gcc需要的包都在下面放呢,不要用下面的版本,每个系统不一样4.下图中gcc所有rpm安装包的由来  【在寻找gcc安装包的过程时我是先搜所需依赖,后来直接下载怎么装都装不上 ,主要原因就是版本和安装顺序不对,安装顺序从教程和报错中寻找,】  我安装的镜像是redhat-rhel-server-6.8-x86_64-dvd.iso 用WinRAR打开镜像  redhat-rhel-server-6.8-x86_64-dvd.iso\Packages  这个目录下面看看,  看到了什么,这个是所有和系统适配的rpm安装包,找gcc-**** 包名字,  解压出来,然后安装,安装或报错,看着报错缺失的是哪个依赖包,然后去镜像  压缩包里面寻找,版本保证一致。  5.为了不出现其他错误,尽量重装一边,保证系统干净。懂不?

gcc需要的包名 版本  redhat-rhel-server-6.8-x86_64-dvd.iso

给两个网上的教程

***隐藏网址***

***隐藏网址***

gcc生成文件只能在本地运行

题主是否想询问“gcc生成文件只能在本地运行的步骤”?1、首先gcc是一个可移植的编译器,支持多种硬件平台,例如ARM,X86等等。2、其次本地编译器是指编译出来的程序只能够在本地环境进行运行。3、最后都是链接生成到最后的可执行文件。

问: java中多分支语句和普通的if语句有什么不同,在使用时应该注意什么这是实验报告,别告诉

switch与if..else 的执行的效率问题 今天读一前辈的程序,发现其在串口中断里面为了分析协议的报文类型,在中断函数里面使用if..else语句。因为报文类型在现在看来只有两种,以后有可能还会增加,不确定。 本人以为这样用有些不妥,为什么不用switch语句呢?猜想是不是因为效率方面的考虑呢,毕竟我们应该尽量是中断的处理代码更加简洁,时间效率更高才好。 所以本人就查找相关资料,资料显示switch语句反而比ifelse的执行效率要高。 下面来详细描述switch与ifelse的区别。 switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。具体地说,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。//int main(){ unsigned int i,j; i=3; switch (i) { case 0: j=0; break; case 1: j=1; break; case 2: j=2; break; case 3: j=3; break; case 4: j=4; break; default: j=10; break; }}用gcc编译器,生成汇编代码(不开编译器优化) .file "shiyan.c" .text.globl main .type main, @functionmain: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp movl $3, -8(%ebp) cmpl $4, -8(%ebp) ja .L2 movl -8(%ebp), %eax sall $2, %eax movl .L8(%eax), %eax jmp *%eax .section .rodata .align 4 .align 4.L8: .long .L3 .long .L4 .long .L5 .long .L6 .long .L7 .text.L3: movl $0, -12(%ebp) jmp .L11.L4: movl $1, -12(%ebp) jmp .L11.L5: movl $2, -12(%ebp) jmp .L11.L6: movl $3, -12(%ebp) jmp .L11.L7: movl $4, -12(%ebp) jmp .L11.L2: movl $10, -12(%ebp).L11: addl $20, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3" .section .note.GNU-stack,"",@progbits由此看来,switch有点以空间换时间的意思,而事实上也的确如此。1.当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if。。else是遍历所以得可能值,知道找到符合条件的分支。如此看来,switch的效率确实比ifelse要高的多。2.由上面的汇编代码可知道,switch...case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch...case的空间利用率将变得很低。3.switch...case只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a 》 1 && a 《 100),是无法使用switch...case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是ifelse能应用于更多的场合,ifelse比较灵活。由此看来,上面前辈的中断处理程序中用switch是比较合适的,即节省了时间,而且对于以后程序的扩展也是很方便。因为报文类型这个值基本上都是用整形常量来表示的。

OK,关于gcc编译器实验报告心得和有谁比我悲催,在linux下编译个gcc编译了两个月都没成功的内容到此结束了,希望对大家有所帮助。