遇到一个gcc编译器版本导致的运行结果有差异的问题
在无头绪时,将代码纳入以前写的工程库在VS中测试,发现一切正常。结论是windows编译后运行结果正确,但linux却不正确,这又让我郁闷了。后来又试了不同的linux,结果有的成功,有的还是有错误。再细查,原来所用的gcc版本不同导致运行结果不同。在最新的4.8版本中,解密后的数据不对,但在4.6版本却是正确的。
核心的代码实际上使用了宏定义,示例如下:
#define M_NUM 0xdeadbeef
#define XOR(m1, m2, m3) (m1*M_NUM^m2^m3)
#define FOOBAR(f, u, c, k) (f ^ XOR(u,c,k))
单从代码上,我无法解释为什么在不同的gcc得到的结果不同。在我的知识水平范围同,我无从修改代码,姑且认为是编译器的问题(代码有问题赖编译器可不是好习惯)。既然是编译器版本的差别,只能曲线找方法。我的方法是将实现加密、解密的文件单独使用4.6版本的gcc编译成lib,然后其它代码模块调用这个库的函数,这样避免了用高版本的编译器编译所有文件。事实说明,这样的可行的,虽然方法在专业人士或领导眼中不屑一顾,但我不说,又有谁会遇到这种问题呢?我又岂能为了这个小模块而将移植好的内核、驱动、根文件系统工具重新使用4.6版本的gcc编译过一次呢?
2015.10.19的PS:
如今因为修正另外的代码分支代码警告而遇到这个代码片段,在VS2010、gcc4.4、gcc4.8上的编译结果均不相同。经仔细揣摩仅的几行语句,发现是同一语句对同一变量进行多次运算造成的未定义行为。示例代码:
*ptr++ = FOOBAR(*ptr, f, u, c);
类似学校经常考的i=i++这种题目。这种语句的结果因编译器不同而不同。编译器警告提示为:
warning: operation on ‘ptr’ may be undefined [-Wsequence-point]
有兴趣的可以搜索一下sequence-point这个关键词,网上有很多资料。
李迟,2015年1月17日,中午
遇到一个gcc编译器版本导致的运行结果有差异的问题相关推荐
- 如何查看GCC编译器版本
查看GCC编译器版本
- 查看gcc编译器版本
我们在windows下DS5中编译时使用GCC交叉编译器,但是在ubuntu时也需要使用GCC编译器,这时最好时保持版本一致,所以就需要查看windows下版本,如下图,在按装的文件夹中找到对应得文件 ...
- 如何升级Symbian Carbide C++的GCC编译器版本
参考资料: How to use GCCE 4 with Symbian SDKs Carbide C++的编译器 在Symbian开发工程中,Carbide C++是非常好用的开发工具,目前提供GC ...
- linux如何切换gcc版本,切换GCC编译器版本
当前版本信息 root@ubuntu:runninglinuxkernel_4.0# aarch64-linux-gnu-gcc -v Using built-in specs. COLLECT_GC ...
- linux gcc编译只能编译一条,请教一个gcc编译器的问题啊
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 楼主要跑分子动力学? 放弃GNU编译器,改用Intel编译器吧. 另外gromacs不用CMake也能编译. export CC=icc export C ...
- 不同版本GCC编译器之间的切换
编译器版本有时太高,好多软件是运行会报错,所以最好安装多个版本的gcc编译器,用的时候来回进行切换 yum -y install gcc yum -y install gcc-c++ 这是安装gcc命 ...
- 手把手教你搭建Linux开发环境(VMware+Ubuntu)(四)——gcc编译器的安装和使用
上回,我们已经把vim的安装.配置和使用说完了,今天我们就来谈谈Linux下gcc编译器的安装和使用. PS:还不会vim的同学,建议移步: Ubuntu下vim编辑器的安装.配置和使用 1.查看gc ...
- GCC编译器——GCC编译器的简介
以下内容源于C语言中文网的学习与整理,如有侵权请告知删除. 参考内容 (1)C语言程序设计门户网站(入门教程.编程软件) (2)GCC官方文档网址 一.GCC编译器的由来 谈到 GCC编译器,就不得不 ...
- 用gcc编译器运行c语言程序
用gcc编译器运行c语言程序 (1)首先要检查是否安装了gcc编译器 [root@localhost ~ ]# rpm -qa|grap gcc 如果显示的内容里有下面的结果则已安装了gcc编译器 g ...
最新文章
- Joomla和Drupal简介
- Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态
- iPhone上运行Linux也要来了
- 在同一台机器上启动多个JBoss A-MQ JVM
- 刷抖音看到 Python 工程师的工资条后,我沉默了...
- 对称机密算法与非对称机密算法
- cif是目的港交货吗_刚接手出口业务,搞不懂FOB? CIF? 为你科普→
- 95-180-050-源码-Watermark-允许固定数量延迟的分配器(BoundedOutOfOrdernessTimestampExtractor)
- SpringCloud Stream操作消息队列
- 多个Excel合并为一个Excel表
- Exchange 2010升级到Exchange 2016汇总
- 字节跳动员工晒出税后工资,网友:怀疑你是日薪
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YIQ颜色空间转换
- Spring框架学习 思维导图
- PHP+MySQL实现用户登录注册API接口
- 中文转 拼音字母、全拼 工具类
- 安徽省计算机应用能力考试证书,合肥信息技术职业学院1084名学子成功获得了全国信息化应用能力考试合格证书...
- 明哥复习MyBatis(1)
- P1209 [USACO1.3]修理牛棚
- K13140 环形跑道(简化版)
热门文章
- python 知识点怎么办_python中的小知识点
- 帕特·基辛格被任命为英特尔CEO已有一年
- 瑞信中国前CEO唐臻怡加盟商汤科技出任副总裁
- 特斯拉车顶维权女车主称被恐吓 将公布特斯拉提供的不完整数据
- 开着开着,Model S天窗飞了!特斯拉回应...
- 制动方面存隐患 上汽通用召回2215辆别克、雪佛兰等车型
- 女子多年未住别墅成剧组拍摄地,网友:看个剧才想起自己还有栋别墅
- 荣耀20s真机谍照曝光:开孔全面屏+后置竖排三摄
- “天天快报”涉黄被下架?官方回应:不是我 是山寨版APP
- 首次击败美国!2019《财富》世界500强公布:129家中国公司上榜