Android c++ Release 和debug版本区别

这两天遇到一个非常郁闷的问题,好不容易把debug版本调试通类,功能也多实现类,编译成release版本,居然有的文件无法打开,有的图像显示的颜色不正确,按照正常的思路,是预debug宏定义相关,可是Rester.cpp检查了好几遍,没有定义debug宏,我把其他的文件编译成Release版,这个文件编译成Debug版,就没有问题,没有办法,只能找到绘图的这部分操作,修改相关的颜色赋值,看图像的变化,来确定出问题的部分

费了半天劲,终于找到问题的所在,代码如下

  ((RGBIL*)pix)->c0 = (((RGBIL*)pix)->c0 >> antiShift) & 0x00FF00FFL;
 ((RGBIL*)pix)->c1 = (((RGBIL*)pix)->c1 >> antiShift) & 0x00FF00FFL;

其中 RGBIL定义如下

typedef struct _XRGBIL {  
    U32 c0;
    U32 c1;
}RGBIL;

这种方法一次操作32位的数据赋值,在debug版本下没有问题,但Release版本就出现错误

修改为

                                    pix->blue = (pix->blue >>antiShift)& 0xFF;
                                    pix->green = (pix->green >>antiShift)& 0xFF;
                                    pix->red = (pix->red >>antiShift)& 0xFF;
                                    pix->alpha = (pix->alpha >>antiShift)& 0xFF;

pix类型如下:

typedef struct _XRGBI { 
    U16 blue;
    U16 green;
    U16 red;
    U16 alpha;
}RGBI;

这样的操作,就没有问题了。

下面也是出问题的地方,直接赋值就是有问题,只能改为一个字节一个字节的赋值
        #if defined(__ANDROID__)
            char * t1 = (char*)(script+pos);
            char * t2 = (char*)&data;

            for (int i = 0; i < 4; i++)
            {
                *(t2 + i) = *(t1 + i + 4);
            }
            for (int i = 0; i < 4; i++)
            {
                *(t2 + i + 4) = *(t1 + i);
            }

        #else
            XU32*p=(XU32*)&data;
            XU32*ps=(XU32*)(script+pos);
            p[0]=ps[1];
            p[1]=ps[0];
        #endif


真不知道gcc是怎么做的,到底做了那些优化


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值