如果没有-O2标志和g ++,ICU Transliterator不起作用

时间:2012-08-15 15:26:16

标签: g++ icu

我一直遇到ICU基于规则的Transliterator的问题,结果是使用g ++ 4.7.1在调试版本上缺少-O2标志。当我执行发布版本(具有-O2)时,它工作正常,但是当我构建没有该标志进行调试的项目时,Transliterator对象将永远无法正确创建。

Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status);

如果没有优化,t会被指定一个空指针,而status会被设置为32767,当通过ICU的BOGUS UErrorCode运行时会转换为u_errorName()

我尝试的第一件事是从我的构建中删除-g调试标志,但这与createFromRules()返回的内容没有区别。只有当我添加-O2时才会创建Transliterator对象。

测试表明-O1-O2-O3都按预期工作,只有-O0会导致这种情况发生。

有人可以解释为什么会出现这种情况吗?

1 个答案:

答案 0 :(得分:2)

使用/不使用调试时,不应该有不同的结果。你能创建一个包含规则的小测试用例,给出ICU版本和OS /平台,并提交票证吗? 4.7.1于2个月前发布。可能是一个编译器错误(ICU有找到这些的历史记录!!)或潜在的错误。您可以将错误链接到此问题,反之亦然。