码迷,mamicode.com
首页 > 其他好文 > 详细

[原]高版本gcc编译哟优化可能导致问题

时间:2014-12-23 00:02:12      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:

系统:ubuntu14.04

编译器:gcc4.8.2

问题描述:工作需要,使用libnids,所以就下了最新版本的1.24,编译安装后,发现tcp报文重组工作无法完成,具体表现为虽然通过nids_register_tcp函数注册了回调函数,但函数一直不能被执行,通过对libnids执行流程的跟踪,发现在计算checksum的时候出了问题,checksum的值一直不为零,导致libnids认为数据报损坏.

不明所以,但通过思考,觉得问题应该处在编译器上,是不是64位和32为的问题呢?源码中并没有使用long等可能导致问题的数据类型呀.后来想到编译优化,果然就是这个问题:高版本gcc编译时如果采用-O2及以上优化等级时,结构体的长度可能会发生变化(为了加快寻址速度,编译器优化了对齐方式),这时候不能使用手动算出的地址偏移,会有问题.

解决方案:编译时加上-fno-strict-aliasing选项

可参考的一些连接:

https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1072650

http://edeca.net/wp/2014/03/libnids-on-64-bit-architecture-machines/

[原]高版本gcc编译哟优化可能导致问题

标签:

原文地址:http://www.cnblogs.com/caoyingjie/p/4179178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!